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」は完全に誤りなようです。

■実験

<?PHP
$var = "";
if (isset($var)) {
   print "var is set.\n";
}

if (empty($var)) {
   print "var is empty.\n";
}
?>

実行結果
var is set.
var is empty.


<?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.


<?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

昔のブログ

TCP/IP

E-mail

hazumu1986 [at] gmail.com

このアーカイブについて

このページには、過去に書かれたブログ記事のうちPHPカテゴリに属しているものが含まれています。

前のカテゴリはMTです。

次のカテゴリはvimです。

PHP: 月別アーカイブ