彼らの挙動に悩まされたのでまとめ。
調べる前に自分で勝手に思っていたこと
わけわからん。。
そもそも、この場合の「空」って何?
■empty
・説明(PHP公式サイトより)
・TRUEを返す場合
0が文字列でもTRUEになるのか!!
■isset
・説明(PHP公式サイトより)
・TRUEを返す場合
変数の中身がFALSEでも空文字列でもTRUEを返す。とにかくNULL以外ならTRUE。
よって僕が最初に抱いていた「空でなければTRUE」は完全に誤りなようです。
■実験
1
2
3
■参考ページ
PHP: empty - Manual
http://php.net/manual/ja/function.empty.php
PHP: isset - Manual
http://www.php.net/manual/ja/function.isset.php
調べる前に自分で勝手に思っていたこと
empty : 変数が空だったらTRUE
isset : 変数が空でなければTRUE
わけわからん。。
そもそも、この場合の「空」って何?
■empty
・説明(PHP公式サイトより)
変数が空であるかどうかを検査する
・TRUEを返す場合
"" (空文字列)
0 (0 は整数)
"0" (0は文字列)
NULL
FALSE
array() (空の配列)
var $var;(変数が宣言されているが、クラスの中で値が設定されていない)
0が文字列でもTRUEになるのか!!
■isset
・説明(PHP公式サイトより)
変数がセットされており、それが NULL でないことを調べます。
変数が、unset() により割当を解除された場合、 何も値が設定されていない状態になります。 NULLに設定されている変数を調べた場合、
isset() はFALSEを返します。 NULLバイト("\0")はPHPの定数 NULLと等価ではないことにも注意してください。
複数のパラメータを渡した場合は、isset() はそれらすべてがセットされている場合にのみ TRUE を返します。
左から順に評価を行い、セットされていない変数があった時点で処理を終了します。
・TRUEを返す場合
"" (空文字列)
0 (0 は整数)
"0" (0は文字列)
FALSE
array() (空の配列)
$var = 'hoge';(変数の中身がある場合)
変数の中身がFALSEでも空文字列でもTRUEを返す。とにかくNULL以外ならTRUE。
よって僕が最初に抱いていた「空でなければTRUE」は完全に誤りなようです。
■実験
1
<?PHP
$var = "";
if (isset($var)) {
print "var is set.\n";
}
if (empty($var)) {
print "var is empty.\n";
}
?>
実行結果
var is set.
var is empty.
2
<?PHP
$var = 0;
if (isset($var)) {
print "var is set.\n";
}
if (empty($var)) {
print "var is empty.\n";
}
?>
実行結果
var is set.
var is empty.
3
<?PHP
$var = null;
if (isset($var)) {
print "var is set.\n";
}
if (empty($var)) {
print "var is empty.\n";
}
?>
実行結果
var is empty.
■参考ページ
PHP: empty - Manual
http://php.net/manual/ja/function.empty.php
PHP: isset - Manual
http://www.php.net/manual/ja/function.isset.php
続きを読む: 【PHP】empty、issetまとめ