PHPの isset、empty、is_null をしっかり理解して使おうと思い整理してみました。既にこのような記事「PHP isset, empty, is_null の違い早見表」もあるのでここではこれより少し踏み込んだところまで書いてみます。
まず表ですが、順番を理解しやすい形に変えてみました。下記のように赤と青のグループで分けて考えておくと理解しやすいです。これをみると「if ($var)
とempty
」、「isset
とis_null
」が対になっているのがわかります。
感覚的には、if ($var)
は値がありそうだなと思うものがtrue
になり、empty
も値がなさそうだな思うものがtrue
になる感じがします。isset
は、何かしら値がセットされてばtrue
(つまり値がfalse
でも結果はtrue
)、is_null
は値がnull
であればtrue
ということになります。
次に、PHPのerror_reporting
をE_ALL
にした場合に、indexのない配列にアクセスした場合やオブジェクトが空の変数や関数にアクセスした場合の挙動をまとめてみました。
タイトル | if ($var) | empty | isset | is_null |
---|---|---|---|---|
$var = ;$var[0]; | Undefined offset: 0 | true | false | Undefined offset: 0 |
$var = ;$var[‘hoge‘] | Undefined index: hoge | true | false | Undefined index: hoge |
$var = null;$var[‘hoge‘] | null | true | false | null |
$var = (object);$var->var; | Undefined property: stdClass::$func | true | false | Undefined property: stdClass::$func |
$var = null;$var->var; | Trying to get property of non-object | true | false | Trying to get property of non-object |
$var = (object);$var->func(); | Error: Call to undefined method stdClass::func() | Error: Call to undefined method stdClass::func() | 実行不可 | Error: Call to undefined method stdClass::func() |
$var = null;$var->func(); | Error: Call to undefined method stdClass::func() | Error: Call to undefined method stdClass::func() | 実行不可 | Error: Call to undefined method stdClass::func() |