2014-02-16

PHPの型判別・キャストの方法まとめ

no_image.jpg

[ 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
長谷川 智希
秀和システム
売り上げランキング: 33,757

コメントはTwitterアカウントにお願いします。

RECENT POSTS


[ PR ]

.