k01ken’s b10g

He110 W0r1d!

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