PHPのnullはハマりポイントになりかねない

$ php -r '$data = array(); echo $data["key"];'
PHP Notice:  Undefined index: key in Command line code on line 1

当然ですね。

$ php -r '$data = null; echo $data["key"];'

今更ながらに知ったのだけど、NOTICEも何も出ないのね。

決まったフォーマットの連想配列が返ってくることを期待したコードがnullを受け取ると、予期せぬハマりポイントになりかねない。

ちゃんとissetとかで確認するなりしてればいいのだけど あまりよくなかったので追記(後述)、

<?php
$result = hogehoge();
if ($result['errCode']) {}

みたいなゆるふわコードが紛れていると、問題箇所が特定しづらかったりしますね。

(2011/08/25追記)
コメント頂いたのでもう少し見たら、nullにisset使ってもダメでした。

$ php -r '$data = null; echo (isset($data["key"])) ? "exists\n" : "none\n";'
none

array_key_existsだと、WARNINGが走るのでより「想定外」であることが明確になる。

$ php -r '$data = null; echo (array_key_exists("key", $data)) ? "exists\n" : "none\n";' 
PHP Warning:  array_key_exists(): The second argument should be either an array or an object in Command line code on line 1

Warning: array_key_exists(): The second argument should be either an array or an object in Command line code on line 1
none

本来的にはnullが返ってくるのを想定して、is_nullであらかじめ対応しておくとか、is_arrayでちゃんと配列が返ってくるのを確認するというのがあるべき姿か。