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の公式マニュアルを見て確かめましょう。