PHPで値がセットされているか確かめる方法

似たようなエントリは世間に無数にありますが、自分用のまとめとして。

PHPで「値がセットされているか」をチェックするには、下記のように何通りか書き方があります。

if (isset($var)) {...}
if (!empty($var)) {...}
if ($var) {...}

それぞれの違いがあいまいだと痛い目を見るので、違いをハッキリさせておきます。

テストコード

結果

*** NULL ***
isset(NULL): false
!empty(NULL): false
(NULL): false

*** true ***
isset(true): true
!empty(true): true
(true): true

*** false ***
isset(false): true
!empty(false): false
(false): false

*** 'false' ***
isset('false'): true
!empty('false'): true
('false'): true

*** '' ***
isset(''): true
!empty(''): false
(''): false

*** 0 ***
isset(0): true
!empty(0): false
(0): false

*** '0' ***
isset('0'): true
!empty('0'): false
('0'): false

*** 'aaaaa' ***
isset('aaaaa'): true
!empty('aaaaa'): true
('aaaaa'): true

*** 12345 ***
isset(12345): true
!empty(12345): true
(12345): true

*** array () ***
isset(array ()): true
!empty(array ()): false
(array ()): false

以上より、「値がセットされているか」が真になるのは、下記の表のようになります。

- isset($var) !empty($var) ($var)
NULL false false false
true true true true
false true false false
‘false’ true true true
“ true false false
true false false
‘0’ true false false
‘aaaaa’ true true true
12345 true true true
array() true false false

まとめ

  • issetはNULL以外がセットされていればtrue
  • 「!empty($var)」と「($var)」は同義
  • empty()は大変クセが強いので、公式マニュアルを熟読しましょう。

varが空でないか、0でない値であれば FALSE を返します。

次のような値は空であるとみなされます。

  • ”” (空文字列)
  • 0 (整数 の 0)
  • 0.0 (浮動小数点数の 0)
  • “0” (文字列 の 0)
  • NULL
  • FALSE
  • array() (空の配列)
  • var $var; (変数が宣言されているが、クラスの中で値が設定されていない)

参考

PHPの公式マニュアルを見て確かめましょう。