LoginSignup
1
2

More than 3 years have passed since last update.

PHPで「ここはis_null?empty?isset?」ってなったので比較してまとめた。

Last updated at Posted at 2020-08-13

is_null?empty?isset?ってなることが多々あったので、比較実験した。

実験内容

それぞれに以下を与えて結果を取得する。

  • $string; //変数を宣言するだけ
  • $string = 'test'; //文字列
  • $string = null; //null
  • 未定義の変数
  • 空文字

最終結果はページの最後に表にしています。

is_null()

変数がNULLかどうか調べる。つまり、nullならばtrueが、それ以外であればfalseが返ってくる。

$string;
is_null($string); // true

$string = 'test';
is_null($string); // false

$string = null;
is_null($string); // true

//定義していない $a
 is_null($a); // true

//空文字
is_null(''); // false

empty()

変数が空であるかどうかを検査する。「変数が空」のイメージがしっくり来ないので、以下でテスト。

$string;
empty($string); // true

$string = 'test';
empty($string); // false

$string = null;
empty($string); // true

//定義していない $b
empty($b); // true

ここまでは、is_nullと挙動が同じだなーって思ったが、以下の挙動が違った。


//空文字
empty(''); // true

空文字は「変数が空である」と捉えられるらしい。

isset()

変数が宣言されていること、そして NULL とは異なることを検査する。

つまり、

  • 変数が宣言されている
  • その変数がnullではない

という2つの条件が整うとtrueが返ってくる。is_nullとemptyとは異なり2つ条件があるっぽい。

is_nullとemptyとは「あったらtrue」という感じでニュアンスが違う。


$string;
isset($string); //false (変数は宣言されているが、nullなのでアウト)

$string = 'test';
isset($string); // true (変数は宣言され、文字列が与えられているのでセーフ)

$string = null;
isset($string); // false (変数は宣言されているが、nullなのでアウト)
// 定義していない $c
isset($c); // false (変数が宣言されていないのでアウト)

なるほど。じゃあ変数としてではなく、直接文字列とか与えたらどうなる??(以下のように)


isset('');
isset('string');

結果は、

PHP Fatal error:  Cannot use isset() on the result of an expression (you can use "null !== expression" instead)

ダメらしい。

まとめ

上の結果を以下の表にまとめました。

$string $string = 'test' $string = null 定義していない変数 空文字を直接
is_null true false true true false
empty true false true true true
isset false true false false 空文字にかかわらず直接与えるとエラー
1
2
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2