こうして僕らは腐る

ねえ、秒速100Usersなんだって、このブログがバズる速度。秒速100Users

PR

PHPにおけるemptyの有用性

久々に記述的なトピックを。

 

PHPをメインにお仕事をしているのですが

自分はempty()関数を結構使います。

てか存在判定はemptyがほとんどです。

 

【emptyとは】

例: empty($val)

$valの値が存在していないかどうかの判定をします。

存在していないと判定された場合はtrueを返す

詳しくは以下

PHP: empty - Manual

 

さて、実はいろいろな案件をこなしていると

これをあんまり使ってほしくなさそうな態度をとられることあります。

 

この関数は複数の曖昧な存在を空であると判断するため

嫌っている人がいるのではないかと解釈しています

 

公式でも書かれていますが

例で書いた$valがnullであっても空(""という状態)であっても0であっても

存在しないという扱い(関数の結果がtrueである)になるため

かなり広範囲の状態を存在していない、と判断するわけです。

 

ただこいつのいいことは配列のIndexが存在しないケースも

存在しないよ!と判定してくれることです。

 

検索結果の配列をforeachで回すことなどがあります。

検索した結果、値が存在しなかったという場合や

配列が存在しないパターンもあります。

 

検索結果が取得出来た場合以下のような配列が帰ってきたとします

$list[0] = 'apple';

 

もし検索結果がある場合表示したいという時に

if(isset($list[0]))

    echo $list[0];

このように記述すると、検索結果がない場合は

そもそも$list[0]の0というインデックスがないためエラー落ちします。

 

if(empty($list[0]))

    echo $list[0];

もちろん上記はかなり極端で簡単な例ではありますが。

ここでempty()を使えば、検索結果があってもなくてもエラーになることはありません。

 

なので配列をしょっちゅう使うPHPでは配列の存在と値の存在を同時チェックできる

という意味ですごく有用だと思います。

emptyを使わないなら、まず配列の中身が存在するかのチェックを行い

配列の0インデックスの中身のチェックも行わければならない。

 

emptyではfalse , 0 も存在しない判定になりますが

true , falseを判定したければ

if($val === true) {

} else {

}

という風に厳密にチェックを行うべきだと思っています。

 

0そのものを存在してるという扱いにしたい場合は

emptyは使うべきではないでしょう。

 

それ以外のケースでは配列のインデックスの存在と

中身が空白かどうかのチェックを同時に行ってくれる便利なやつという認識。

ただみんな結構、isset()関数を使っているんだよなあ。