PHPでnullを判定する関数isset・empty・is_nullの違いと使い方

PHPでnullを判定する関数isset・empty・is_nullの違いと使い方

393 回閲覧されました

みなさんこんにちは、jonioです。

PHPを学習していてisset・empty・is_nullを見かけたのですがすぐに忘れそうなのでアウトプットとしてこの記事を残します。

isset

これは変数に何らかの値が入っているかを判定する関数です。

値が入っていればいいのでNULL以外の値は全て「true」の判定になり空文字でも値が入っているとみなします。

具体的に見ていく為に変数「$test」で考えます。

例えば下記だとtrueになります。

  • $test = “”(空文字)
  • $test = 0
  • $test = “テスト”

下記だとfalseになります。

  • $test = null
  • $testを宣言無しで使う

コードでの使い方は下記になります。

<?php
    $test = "";

    if(isset($test)){
        echo "trueです";
    }else{
        echo "falseです";
    }
?>
//実行結果は「trueです」


<?php
    $test = null;

    if(isset($test)){
        echo "trueです";
    }else{
        echo "falseです";
    }
?>
//実行結果は「falseです」

empty

これは変数が空なのかを判定する関数です。

だから0・false・空文字・NULLの場合はtrueの判定になり「test」など値が入っている場合はfalseの判定になります。

コードでの使い方は下記になります。

<?php
    $test = null;

    if(empty($test)){
        echo "trueです";
    }else{
        echo "falseです";
    }
?>
//実行結果は「trueです」


<?php
    $test = テスト;

    if(empty($test)){
        echo "trueです";
    }else{
        echo "falseです";
    }
?>
//実行結果は「falseです」

is_null

これは変数が宣言されていなかったりnullの場合にtrueの判定になります。

issetは変数が宣言されていなかったりnullでなかったらtrueになるのでissetの逆だと思いますがちょっと違います。

コードでの使い方は下記になります。

<?php
    if(empty($test)){
        echo "trueです";
    }else{
        echo "falseです";
    }
?>

実行結果は「trueです」となります。

is_nullとissetは真逆の関係ではない

issetは配列の判定ができますがis_nullは配列の判定ができません。

試しに下記のコードを考えます。

<?php
    $test = [];

    if(is_null($test)){
        echo "trueです";
    }else{
        echo "falseです";
    }
?>

配列の中身が空なので「trueです」になりそうですが実行結果は「falseです」になります。

isssetで試すと配列という値があるので「trueです」になります。

<?php
    $test = [];

    if(isset($test)){
        echo "trueです";
    }else{
        echo "falseです";
    }
?>

また配列の中身があったとしてもis_nullは配列の判定ができないので実行結果は「falseです」になります。

<?php
    $test = [1, 2, 3];

    if(is_null($test)){
        echo "trueです";
    }else{
        echo "falseです";
    }
?>

issetだと「trueです」になります。

<?php
    $test = [1, 2, 3];

    if(isset($test)){
        echo "trueです";
    }else{
        echo "falseです";
    }
?>