2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

PHP isset is_null emptyについて

Posted at

概要

  • PHPのisset()is_null()empty()について曖昧だったので自分のためにまとめる。(この手の記事は先人の皆さんがたくさん記載頂いているが自分の勉強のためにも自力でまとめてみる。)

isset()

  • PHPのドキュメントには下記のように記載されている。

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

  • その変数が宣言されていて、かつ、nullではない場合trueを返す。それ以外の場合falseを返す。

  • 複数の引数が渡された時、全て「その変数が宣言されていて、かつ、nullではない場合」のみtrueを返す。

  • また、ドキュメントには下記のように記載されており、isset()は関数ではなく言語構造(ifforとかと同じでPHPにもとから組み込まれている処理)である。

    これは、関数ではなく 言語構造のため、可変関数 や 名前付き引数 を用いてコールすることはできません。

  • 例を下記に記載する。

    <?php
    
    var_dump(isset($foo)); // $fooが定義されていない時 false
    
    $foo = null;
    var_dump(isset($foo)); // $fooが定義されているがnullが格納されている時 false
    
    $foo = 'aaa';
    var_dump(isset($foo)); // $fooが定義されていてnull以外が格納されている時 true
    
    $foo = 'aaa';
    var_dump(isset($foo, $var)); // 複数の引数のいずれかが、定義されていない時 false
    
    $foo = 'aaa';
    $var = null;
    var_dump(isset($foo, $var)); // 複数の引数のいずれかが、定義されているがnullが格納されている時 false
    
    $foo = 'aaa';
    $var = 'bbb';
    var_dump(isset($foo, $var)); // 複数の引数が定義されていてnull以外が格納されている時 false
    

is_null()

  • PHPのドキュメントには下記のように記載されている。

    変数が null かどうか調べる.

  • チェックする変数はあくまで定義済であることが前提となる。

  • すなわち「この変数、絶対定義されているけど中身がnullかどうか調べたい〜!」というときに使う。

  • 例を下記に記載する。

    <?php
    
    var_dump(is_null($foo)); // $fooが定義されていない時 error
    
    $foo = null;
    var_dump(is_null($foo)); // $fooが定義されているがnullの時 true
    
    $foo = 'aaa';
    var_dump(is_null($foo)); // $fooが定義されていてnull以外の時 false
    
    $foo = 'aaa';
    var_dump(is_null($foo, $var)); // 複数の引数は受け取れないためerror
    
    $foo = 'aaa';
    $var = 'bbb';
    var_dump(is_null($foo, $var)); // 複数の引数は受け取れないためerror
    

empty()

  • PHPのドキュメントには下記のように記載されている。

    変数が空であるかどうかを検査する

  • また、「変数が空」とみなされるのは下記の状態となる。

    変数が存在しない場合や 変数の値が false に等しい場合です。

  • 更に注意が必要なのはempty()は引数の変数が未定義の場合であってもエラーが出ない。

    empty() は、変数が存在しない場合でも警告を発しません。

  • さらにbool値のfalseと判断される値が渡された時trueを返す。

  • 例を下記に記載する。

    <?php
    
    var_dump(empty($foo)); // $fooが定義されていない時 true
    
    $foo = false;
    var_dump(empty($foo)); // $fooが定義されているがfalseが格納されている時 true    
    
    $foo = 0;
    var_dump(empty($foo)); // $fooが定義されているが0が格納されている時 true
    
    $foo = 0.0;
    var_dump(empty($foo)); // $fooが定義されているが0.0が格納されている時 true
    
    $foo = -0.0;
    var_dump(empty($foo)); // $fooが定義されているが-0.0が格納されている時 true
    
    $foo = '0';
    var_dump(empty($foo)); // $fooが定義されているが文字列の0が格納されている時 true
    
    $foo = '';
    var_dump(empty($foo)); // $fooが定義されているが空文字が格納されている時 true
    
    $foo = [];
    var_dump(empty($foo)); // $fooが定義されているが空配列が格納されている時 true
    
    $foo = null;
    var_dump(empty($foo)); // $fooが定義されているがnullが格納されている時 true
    
    $foo = 'aaa';
    var_dump(empty($foo)); // $fooが定義されていてnull以外が格納されている時 false
    
    $foo = true;
    var_dump(empty($foo)); // $fooが定義されていてtrueが格納されている時 false
    
    $foo = 'aaa';
    var_dump(is_null($foo, $var)); // 複数の引数は受け取れないためerror
    
    $foo = 'aaa';
    $var = 'bbb';
    var_dump(is_null($foo, $var)); // 複数の引数は受け取れないためerror
    

まとめ

isset()

  • 「当該の変数が定義済」and「nullではない」場合のみtrueを返す。
  • 複数の引数を渡すことができ、すべての引数において上記条件を満たしていた場合trueを返す。
  • 組み込み関数ではなく言語構造であるので動作が多少早い。
  • 1個以上の引数を取ることはできない。
  • 「変数が定義されているのか」と「nullではないか」をチェックしたい時に使う。

is_null()

  • 「当該の変数がnullである」場合のみtrueを返す。
  • 当該の変数が定義されていない場合はエラーになる。
  • 「確実に変数が定義されていて、nullであるか」をチェックしたいときに使う。

empty()

  • 「当該の変数が未定義」or「falseとして扱われる値」の場合trueを返す。

  • 当該の変数が未定義でもtrueを返す。

  • 1個以上の引数を取ることはできない。

  • 「当該の変数の値がfalseとして扱われる値であるか」をチェックしたいときに使う。

  • 重ねての記載だが、下記だけ注意

    empty() は、変数が存在しない場合でも警告を発しません。

参考文献

2
0
0

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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?