PHPのisset empty is_null がわかりづらい・・・。ついでに配列のキーやオブジェクトのプロパティがあるかどうか判断するには??
こんにちは。柏倉です。
最近まで暖かい日が続いていたと思ったら、急に北風が冷たい日が続くようになってきましたね。。
風邪やインフルエンザも流行っているので、病気にも気を付けていきたいです。
ということで、今回はPHPのnullや空白をチェックする関数についてお話したいと思います。
isset
isset(mixed $var, mixed ...$vars): bool
変数がセットされているかを調べます。 これは変数が宣言されており、 null とは異なる値だということです。
変数が、unset() により割当を解除された場合、 もはやセットされているとは見做されません。
null が代入されている変数をチェックしたときは、 isset() は false を返します。 null文字 ("\0") は PHP の null 定数とは異なることにも注意してください。
複数のパラメータが渡された場合は、 isset() は全てのパラメータがセットされている場合にだけ true を返します。 評価は左から右へと行われ、セットされていない値に出会うとすぐに評価が止まります。
※PHPマニュアル参照 (https://www.php.net/manual/ja/function.isset.php)
結構忘れがちですが、複数評価できます。
empty
empty(mixed $var): bool
変数が空であるかどうかを検査します。 変数が空であるとみなされるのは、変数が存在しない場合や 変数の値が false に等しい場合です。 empty() は、変数が存在しない場合でも警告を発しません。
※PHPマニュアル参照 (https://www.php.net/manual/ja/function.empty.php)
変数が存在しなくても警告は発生しません。
is_null
is_null(mixed $value): bool
指定した変数が null かどうかを調べます。
※PHPマニュアル参照 (https://www.php.net/manual/ja/function.is-null.php)
マニュアルを確認してみたけどいまいち・・・
上記3つのマニュアルを確認してみましたがいまいちわかりづらいですよね。
そこで、違いをまとめてくれてる方がいらっしゃったので、そちらを見てみたいと思います。
PHP isset, empty, is_null の違い早見表
この早見表を見ると大分わかりやすいですね。
いろいろ使ったり調べてみたりしているとわかるのですが、emptyは判断するものが多いため結構微妙だったりします。
私は主にissetを多用しています。
is_nullはほんとにnullの判定しかしてくれないので、限定的な使い方ならいいと思いますが、早見表を見る通りissetの反対になってるので、issetで判定できます。
では配列のキーを調べるには?
array_key_exists(string|int $key, array $array): bool
※PHPマニュアル参照 (https://www.php.net/manual/ja/function.array-key-exists.php)
配列のキーがあるかどうか調べる際はarray_key_exists()を使用します。
ちなみに、ここでもissetでも判定が取れます。
オブジェクトのプロパティが存在するか調べるには?
property_exists(object|string $object_or_class, string $property): bool
※PHPマニュアル参照 (https://www.php.net/manual/ja/function.property-exists.php)
オブジェクトのプロパティが存在するか調べるにはproperty_exists()を使用します。
プロパティが存在している場合は true、存在していない場合に false、 エラー時には null を返します。
また、マジックメソッド __get を使ってアクセスするプロパティを検出することはできませんので注意が必要です。
最後に
簡単にですがPHPのnullや空白をチェックする関数についてお話させていただきました。
一つ一つが微妙に違いわかりづらいですが、ちゃんと使い方を覚えて使いこなせるようになるといいですね。
最後まで読んでくださってありがとうございます。
過去に下記のような記事も投稿していますので、よかったらご覧ください。
VScodeでメモを取るときにMarkdownって使ってますか?
dockerにamazon linux 2023を入れてnginx + php-fpm + Laravel の環境を作ってみた
cssだけでスクロールに追従してくるメニューを作る
今更なんですが意外と負けてないCakePHPのお話