PHP 復習メモ - isset() は null のときも false

PHP の落とし穴シリーズ。
(ちなみに PHP のバージョンは 5.5.9 です)

まだ isset() が 言語構造だとかわかってなかったときに 落とし穴に落ちたことがあります。

次のように配列の要素を取り出そうとして そのキーが存在しない場合、警告が出ます。

$key = $my_array['key'];
Notice: Undefined index: key in ...

isset を使うと確認ができます。

$key = isset($my_array['key']) ? $my_array['key'] : NULL;

if文でも便利です。

if (isset($my_array['key']) && $my_array['key'] ==  ...

PHP の &&(and) や ||(or) は短絡評価なので 後続の式の評価はされません。(警告が出ません)

ただ、この isset ですが、 値が null の場合も true になってしまいます。

たとえば、 次のような処理を書いてしまうと isset() が false になってしまい is_null() が評価されません。

$my_array['key'] = null;

if (isset($my_array['key']) && is_null($my_array['key'])) {
    echo "null";
}
else {
    echo "not null";
}
not null

このような場合は array_key_exists などの他の手段を使う必要があります。

$my_array['key'] = null;

if (array_key_exists('key', $my_array) && is_null($my_array['key'])) {
    echo "null";
}
else {
    echo "not null";
}
null

とは言え、isset() は便利ですので 理解した上で、使い分ける必要があるのだと思います。

[参考]
PHP: array_key_exists - Manual

Google サイト内検索

Amazonアソシエイト