Engineer in Tokyo

PHPの empty値の話

社内チャットで、PHPの NULL、”0”、FALSE、array(), ““の扱い方について、話があった。PHP爆発しろという結論が相変わらず出てきた。

[14:25:02] key: 互換性維持のため
[14:25:18] key: 空の比較ならempty使うべし、と思った。<マニュアル読んだ感想文
[14:25:30] key: http://jp.php.net/empty
[14:25:37] key: 次のような値は空であると考えられます。:

"" (空文字列)
0 (0 は整数)
"0" (0は文字列)
NULL
FALSE
array() (空の配列)
var $var;(変数が宣言されているが、クラスの中で値が設定されていない)
[14:27:51] key: アタマが痛くなりそうなbad know howすぎる
[14:27:52] tokibito: え
[14:28:17] tokibito: "0"
[14:28:21] tokibito: trueになんの
[14:29:27] key: php -r 'var_dump("0" == true);'
[14:29:30] key: bool(false)
[14:29:34] key: ならない
[14:29:39] tokibito: <?php
$i = "0";
var_dump(empty($i));
?>
[14:29:40] Ian Lewis: それは仕様なんですよ。
[14:29:47] tokibito: true
[14:30:02] Ian Lewis: "0" == false == ""
[14:30:06] Ian Lewis: なんだけど、
[14:30:13] Ian Lewis: "0" != ""
[14:30:21] Ian Lewis: そうなんですよ!
[14:30:25] key: キモイ!
[14:31:13] Ian Lewis: transitiveじゃない
[14:31:31] Ian Lewis: "0" == false == "" == ??? ??????爆発

実は、javascriptと同じく、 === を使わなくちゃだめなんですけど、値を直接に if 文に入れると != trueみたいな一貫性が全然ない処理を行ってしまって、結構バグが出やすい現象だね。