🎃
PHPのbooleanとempty関数の罠について
こんにちは、うえむーです。
今回は、PHPのbooleanとempty関数の罠について書きたいと思います。
アンケート結果
先々月、以下の問題をTwitterでアンケートを2日間の期間で取らせていただきました。
$ansの出力結果は?
$bool = false;
$ans = 'A';
$target = 'banana';
$array = array('apple','melon','peach');
if(in_array($target, $array)){
$bool = true;
}
switch (true){
case empty($bool):
$ans = 'B';
break;
default:
$ans = 'C';
break;
}
print_r($ans);
結果は以下の通りになりました。
上記のアンケート結果を見ると「C」が圧倒的に多かったですが実は答えは「B」なのです。
その証拠に、「laravelplayground」で上記のコードをペーストをして実行すると以下のように出力されます。
つまり、
bool変数のbool値が「false」の場合、empty($bool)の出力結果は「true」と返却され、
bool値が「true」の場合、empty($bool)の出力結果は「false」と返却されるのです。
phpの公式ドキュメントにPHP型の比較表が記載されております。
PHP 関数による $x の比較
式 | empty() |
---|---|
$x = false; | true |
$x = true; | false |
まとめ
過去にphpの公式ドキュメントを確認せずに実装したら、不具合が発生したことがありました。
様々な式の出力結果が曖昧だった場合はphpの公式ドキュメントを見て実装するようにしましょう。
Discussion