否定の!、is_null()、isset()、empty() の細かな挙動の違いをすぐ忘れるのでメモ。
check() という関数を作り、「空文字」「文字列の0」「数値の0」「false」「null」「空の配列」で動作確認を行った。
動作確認で使用したコード
<?php $empty_str = ''; $str0 = '0'; $int0 = 0; $false = false; $null = null; $empty_array = array(); check('empty_str', $empty_str); check('str0', $str0); check('int0', $int0); check('false', $false); check('null', $null); check('empty_array', $empty_array); function check($variable_name, $variable) { $ret = var_export( ! $variable, true); echo "! $$variable_name => $ret"; echo "\n"; $ret = var_export(is_null($variable), true); echo "is_null($$variable_name) => $ret"; echo "\n"; $ret = var_export(isset($variable), true); echo "isset($$variable_name) => $ret"; echo "\n"; $ret = var_export(empty($variable), true); echo "empty($$variable_name) => $ret"; echo "\n"; echo "\n"; } ?>
実行結果
! $empty_str => true is_null($empty_str) => false isset($empty_str) => true empty($empty_str) => true ! $str0 => true is_null($str0) => false isset($str0) => true empty($str0) => true ! $int0 => true is_null($int0) => false isset($int0) => true empty($int0) => true ! $false => true is_null($false) => false isset($false) => true empty($false) => true ! $null => true is_null($null) => true isset($null) => false empty($null) => true ! $empty_array => true is_null($empty_array) => false isset($empty_array) => true empty($empty_array) => true
特に気をつけておいた方がいい点
・null値を持つ変数に isset() 関数を適用すると、false が返る。 ・否定の ! と empty() 関数の挙動は同一である。! は empty() のエイリアス?
なお、明確に「空の配列」を判定したい時は以下のようにすべき。
is_array($arr) && empty($arr)
empty($arr) だけの判定だと、$arr に 空文字が入っていた場合でも true になってしまうので。