̃Gg[͂ĂȃubN}[Nɒlj

PHP :: 否定の!、is_null()、isset()、empty() の挙動の違い



否定の!、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 になってしまうので。




programming/php/etc/isnull_isset_empty.txt