メニュー

WEBMEMOする。とあるクリエイターの個人的な備忘録。

phpで変数がnullや空文字かどうかを判定したい時、よくisset()やempty()を使用するのですが、ちょくちょく思った通りの挙動をしてくれないことが。

なので今回はその辺の関数について、実際に出力を確かめながら調べ直してみました。

比較するのは以下の4つ。

  • isset()
  • empty()
  • is_null
  • == null

では、出力結果をまとめていきます。

目次

    各判定方法の実行結果

    それぞれの結果を表にまとめました。

    $hogeという変数に、表にあるそれぞれの値を代入している時の実行結果です。(1: true, 0: false)

    例:$hoge = “”;  の時の、$isset($hoge)や、empty($hoge)

    宣言なし」とは、宣言されていない適当な変数($aaa)を用いた時です。また、「初期値なし」とは、「$hoge;」 と宣言はしているが、何も値を代入しないままの状態の変数です。
    エラーメッセージが表示された結果については、「error」と表記しています。

    $hoge isset($hoge) empty($hoge) is_null($hoge) $hoge == null
    宣言なし 0 1 error error
    初期値なし 0 1 error error
    0 1 1 0 1
    “” 1 1 0 1
    false 1 1 0 1
    null 0 1 1 1
    “0” 1 1 0 0
    array() 1 1 0 1
    array(5) 0 0 0 1

    ややこしいポイント

    意外だったisset()の挙動

    中身がどうというより、issetという名前の通り、引数に渡された変数がセットされたものか、つまり、初期化処理(宣言)されたものかどうかを判定します。なので、例えば変数が空文字 “” だったとしても、初期化処理はされているので、isset()はtrueを返します。

    意外というか、ただの勉強不足でした。

    初期化処理されていない変数に対するエラーの有無

    is_null() や == null では、初期化処理されていない変数を使用するとデバッグモードでエラーが表示されますが、isset()やempty()に使用してもエラーメッセージは表示されませんでした。これは使い分けが重要になってきますね。

    「is_null()」 と 「== null」の結果が結構違う

    これまた意外でした。どうしてここまで違うのか、細かい部分はまだ調べていないのですが、結果が全然違う、ということは頭に入れておきたいです。

     

    おまけ:var_dumpの出力結果を直接見たい方はこちら

    以下のページは、それぞれの実行結果をvar_dump()に入れて出力させているものです。

    こちら

    先ほどの表では入力ミスがあるかもしれないので、確実な結果を確かめたい方はこちらでどうぞ。

    - Thank you for reading this to the end. -

    コメントする

    CAPTCHA


    TOPへ Top