2014-02-16
PHPの型判別・キャストの方法まとめ
[ PR ]
PHPの型は分かりづらい
最近PHPを書くことが多いんですが、型を判別する方法がさっぱり分からなかったのでまとめてみます。
例えば、instanceofという演算子があります。
class Test{}
$t = new Test();
$t instanceof Test; // true
ただ、調子に乗って以下のように使ってみるとエラーになります。
1 instanceof Integer;
// Fatal error: instanceof expects an object instance, constant given in Command line code on line 1
このように、PHPの型の扱いには一癖あります。
型判断の対応表
結論としては、以下のようになります。
型 | 判別方法 |
---|---|
クラス | $a instanceof A |
オブジェクト | is_object() |
null | is_null() |
関数 | is_callable() |
整数 | is_int() |
小数 | is_float() |
ブール型 | is_bool() |
文字列 | is_string() |
配列 | is_array() |
連想配列(ハッシュ) | (※) |
型を文字列で取得 | gettype() |
(※) http://d.hatena.ne.jp/fbis/20091112/1258002754 より
function is_hash(&$array) {
reset($array);
list($k) = each($array);
return $k !== 0;
}
キャスト
一応キャストも書いておきます。
元の型 | 変換先の型 | 方法 |
---|---|---|
文字列 | 整数 | intval() |
文字列 | 小数 | floatval() |
文字列 | ブール型 | $s == 'true' |
文字列 | 配列 | mb_split(",", $s) |
文字列 | 関数 | $f = "print_r"; $f("test"); |
文字列 | クラス | class Test{} $f = "Test"; new $f(); |
整数 | 文字列 | "" . $n |
整数 | 小数 | floatval() |
整数 | ブール型 | $n == 1 |
小数 | 文字列 | "" . $n |
小数 | 整数 | intval(), intval(round()), intval(ceil()) |
小数 | ブール型 | $n != 0.0 |
ブール型 | 整数 | intval() |
ブール型 | 小数 | floatval() |
ブール型 | 文字列 | $b? 'true' : 'false' |
配列 | 文字列 | implode($arr) |
連想配列 | 文字列 | implode($arr) |
null | 文字列 | is_null($a)? 'null' : $a |
null | 整数 | is_null($a)? 0 : $a |
null | 小数 | is_null($a)? 0.0 : $a |
null | ブール型 | is_null() |
関数 | 文字列 | "" . mysqli_connect "" . printf など |
クラス | 文字列 | class Test{}; "" . Test |
意外なキャストの方法もありますが、var_dumpなどで検証すると正しく動いていることがわかります。
特に文字列は万能で、変数に代入して () や new をつけるだけで関数やクラスに変化します。(php 5.3以降では無名関数が推奨されています)
まとめ
PHPはだんだん仕様が追加されていて、バージョン4系と5.3以降は全く別物になっています。
それに伴い、上記の方法以外にも(無名関数など)かなり多様な手段が提供されるようになりました。
個人的には昔のシンプルなPHPが好きでしたが、ライブラリが名前空間を使ったりしているので、もうしょうがないですね。
Webアプリ開発を加速する CakePHP2定番レシピ119
posted with amazlet at 14.02.15
長谷川 智希
秀和システム
売り上げランキング: 33,757
秀和システム
売り上げランキング: 33,757