PHPのisset関数に色んな値を入れた時の挙動
開発環境は、Windows 7 Professional(32bit)+XAMPP v3.22+PHP 7.1.7。
if文で条件分岐させたいときに、isset関数の挙動が気になったのでメモ。
<?php $a = []; $b = ['test' => null]; $c = ""; $d = 0; $e = -1; $f = false; $g = null; $h = "test"; unset($h); if(isset($a)){ echo "true<br>"; }else{ echo "false<br>"; } if(isset($b['test'])){ echo "true<br>"; }else{ echo "false<br>"; } # 存在しないキーを指定する if(isset($b['foo'])){ echo "true<br>"; }else{ echo "false<br>"; } if(isset($c)){ echo "true<br>"; }else{ echo "false<br>"; } if(isset($d)){ echo "true<br>"; }else{ echo "false<br>"; } if(isset($e)){ echo "true<br>"; }else{ echo "false<br>"; } if(isset($f)){ echo "true<br>"; }else{ echo "false<br>"; } if(isset($g)){ echo "true<br>"; }else{ echo "false<br>"; } if(isset($h)){ echo "true<br>"; }else{ echo "false<br>"; } ?>
実行結果
true
false
false
true
true
true
true
false
false
空の文字列や空の配列や0や-1やfalseは、偽と思ったけど、真扱いになって、変数に値がセットされたものをunset関数で削除したものや、連想配列で値をnullにしたものや、存在しないキーを指定したら偽扱いになるみたいですね。
マニュアルを読んでみると、変数に値がセットされているか、かつ、NULLじゃないかを判別するようです。
PHPではisset関数を使う場合は、戻り値などがnullか否かで真偽を判断する場合に用いる。
empty関数も調べたところ、こっちの方が真偽判定には向いてそうです。
PHPのempty関数に色んな値を入れた時の挙動 - k01ken’s b10g
勘違いして、誤った条件分岐をしそうです・・・。注意したい。
参考リンク
PHP: isset - Manual