関数の引数が、関数の中で自動的にキャストされることはない。
===を利用したコード
<?php function hoge($a) { $b = 31; var_dump($a); var_dump($b); return ($a === $b); } var_dump(date('t')); var_dump(hoge(date('t'))); // 1回目の呼び出し var_dump(hoge(31)); // 2回目の呼び出し
結果
string(2) "31"
// 1回目の呼び出し
string(2) "31"
int(31)
bool(false)
// 2回目の呼び出し
int(31)
int(31)
bool(true)
==を利用したコード
ちなみに、==を利用した場合はキャストされるのでtrueになる。
<?php function hoge($a) { $b = 31; return ($a == $b); } var_dump(hoge(date('t'))); // true
こうしても良いでしょう。
<?php function hoge($a) { $b = 31; return ((int)$a == $b); } var_dump(hoge(date('t'))); // true
追記(笑): タイトルを変更しました