注目キーワード
  1. 技術
  2. 広告
  3. IDFA
  4. PHP
  5. WordPress

phpのバリデーションチェック(isset, empty, is_null, ==null, ===nullを徹底確認)

開発において、バリデーションチェックはとても大切です。isset, empty, is_null, ==null, ===nullなど、空チェックを完全に理解して開発ができていますか。今回は、確認のため、記載しておきたいと思います。

確認する対象

確認する関数

チェックしていく対象は、phpの空、0、false、null、未定義です。
比較するのは、以下の5つです。

・isset()
・empty()
・is_null
・== null
・=== null

たまに、ごちゃごちゃになってしまうことがあると思いますので、整理しておきます。

検証内容

$hoge という変数を、下記の9パターンの状態にして、チェックしていきます。
・宣言無し
・初期値の定義無し($hoge;)
・0
・””
・false
・null
・”0”
・array()
・array(“”)


検証

宣言無しの場合

isset() のケースがfalseで、それ以外の場合はtrueになりました。宣言がされていない場合では、empty()はtrueになり、is_nullなどのnull判定は全てtrueになります。
ただ、noticeエラーが出る点は要注意です。画像に記載されている通り、PHPで Notice: Undefined variable: というエラーが出力されています。これは、変数に値がないというエラーになります。

初期値の定義無し($hoge;)の場合

こちらのケースでは宣言はしますが、初期値をセットしないケースです。先ほどの宣言無しの場合と同様に、isset() のケースがfalseで、それ以外の場合はtrueになりました。ここでも、変数に値が入っていないため、PHPでNotice: Undefined variable: というエラーが出力されています。

0の場合

今度は、変数に0をセットしてみました。注意点としては、emptyがtrueという扱いをします。empty()は、0(整数)や”0″(文字列の0)を空と判定するので、注意が必要です。また、is_null も == と === で挙動が違います。型まで見ているかが大きな違いなのですが、気をつけるようにしましょう。

https://www.php.net/manual/ja/language.types.null.php

ここにも記載がありました。

””の場合

空文字の場合、is_null と === null は型まで厳密に見ているので、nullではないと判断し、falseを返しています。それ以外は、trueになっています。

falseの場合

falseの場合、先ほどの空文字と同様に、is_null と === null は型まで厳密に見ているので、nullではないと判断し、falseを返しています。一方で、emptyの場合は、空だと判定されて、trueと返すので注意が必要です。

nullの場合

is_null, == null, === null の場合は、nullがセットされていた場合、trueで返却されています。emptyのケースだと、trueと判定されますので、気をつけてください。

”0”の場合

文字列での “0” の場合です。is_null, == null, === null の場合は、nullではなく文字列がセットされているとみなされますので、falseになります。一方で、このケースでもemptyは、trueと返されます。

array()の場合

空配列の場合です。この場合は、is_null と === null は型まで厳密に見ているので、nullではないと判断し、falseを返していますが、それ以外のケースでは、trueを返しています。

array(“”)の場合

最後に、array(“”)の場合です。これは、配列に空文字が入っている扱いになりますので、issetはtrueになり、それ以外のケースでは、emptyでもなく、nullでもないため、全て結果がfalseになっています。


結果

結果をまとめました。表にまとめています。

ポイント

isset()で気にすること

変数にセットされた値を見るようにしています。変数にセットされている値が何かというより、変数に値がセットされているかを判定しているので、その点を抑えておくようにしましょう。

is_null, == null, === null の挙動について

is_null と === null は、型まで厳密に見ているので、結果は同じになりますが、== null は型まで見ていないため、結果が異なります。null かどうかを確認したいときは、is_null か === null を使うようにしましょう。

emptyはあいまい判断をするので要注意

empty は理解して使わないと、思わぬバグを生む原因になりますので、注意してください。先ほどの例にもありましたが、空文字や 0 の場合など、empty() は多くのパターンで true を返します。判定基準が緩い関数のため、できれば、emptyを使わずに厳密に判定できる関数を使うべきです。

ちなみに、empty() や isset() には未定義の変数に対して使ったとしても、Notice: Undefined variable: のようなエラーが出力されない特別な性質があり、変数名のタイプミスに気がつけなくなってしまいます。

$person = array('taro', 'ichiro');
if (empty($perso)) {
    echo 'これは空配列です';
}

上記のコードを実行すると、’これは空配列です’ と出力されます。先ほど記載した、未定義の変数に対して使ったとしてもエラーが出力されないケースに当てはまっており、$perso と nが抜けていたとしても気付くことができません。

そのため、emptyを使いたい理由がなければ、無理に使わずに避けることをおすすめします。