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() は便利ですので 理解した上で、使い分ける必要があるのだと思います。