変数は、PHP を使用して開発されたほぼすべてのプログラムの中核となるコンポーネントです。ほとんどの場合、変数には初期値がありますが、一部の変数は初期化されていない場合があり、その場合、PHP が「未定義変数」の警告をスローする可能性があります。
変数はさまざまな理由で未定義になることがあります。たとえば、変数がまったく宣言されていない、タイプミスがある、または変数が条件付きで定義されているなどです。さらに、変数の値が NULL である場合があります。これは、変数が初期化されていないこと、または関数が何らかの状態を示すために null 値を返したことを示している可能性があります。
変数を使用する前に、変数が定義されているか空であるかを確認することが重要です。 PHP には、これらの状況に対処するための 3 つの関数 isset()、empty()、および is_null() が用意されています。
まず、これら 3 つの関数の基本的な使用法を理解しましょう。
isset(): 変数が宣言されており、NULL でないかどうかを確認します。
empty(): 変数が存在し、値が false (0、空の文字列、NULL などを含む) ではないかどうかを判断します。
is_null(): 変数の値が NULL かどうかを確認します。
isset() は、変数が定義されていて NULL でない場合に true を返し、変数値が 0、空の文字列、または false の場合でも true を返します。また、empty() は、変数値が 0、空の文字列 ""、文字列 "0"、空の配列、NULL、または false を含む「偽値」の場合に true を返します。
この 2 つは、どちらも言語構造体であり、変数関数を通じて呼び出すことができないという点で似ています。
<?php $fruit = ''; if(isset($fruit)) { echo 'Do you like '.$fruit.'?'; } // Output: Do you like ? if(!empty($fruit)) { echo 'Do you like '.$fruit.'?'; } // No Output ?>
実際、empty() は isset() と論理演算を組み合わせて使用して実装できますが、通常は組み込みの empty() 関数を直接使用する方がより簡潔です。
<?php function my_empty($x) { return !isset($x) || $x == false; } ?>
is_null() は、変数が明示的に NULL に設定されている場合は true を返し、それ以外の場合は false を返します。そして、 isset() は、変数が定義されている限り、NULL ではなく true を返します。
<?php $fruit = NULL; if(isset($fruit)) { echo 'Do you like '.$fruit.'?'; } // No Output if(is_null($fruit)) { echo 'There is no fruit.'; } // Output: There is no fruit. ?>
empty() は、変数値が空の文字列、NULL、整数 0、空の配列などの「偽値」の場合に true を返しますが、 is_null() は変数値が NULL の場合にのみ true を返します。
<?php $person = [ 'first_name' => 「モンティ」、 '姓' => '', '年齢' => '83'、 'fav_movie' => NULL ]; if(empty($person['last_name'])) { if(is_null($person['last_name'])) { echo '姓は NULL に設定されます。'; } それ以外 { echo '姓はおそらくヌルの文字列です。'; } } // 出力: 姓はおそらくヌルの文字列です。 if(is_null($person['fav_movie'])) { エコー $person['first_name']。'お気に入力りの映画を指定しませんでした。'; } // 出力: モンティはお気に入力りの映画を指定しませんでした。 ?>
よりクリーンで安全なコードを記述するためのヒントをいくつか紹介します。
複数の変数を一度に isset() に渡して、それらがすべて定義されており、NULL ではないことを確認できます。
空の文字列または false が NULL として誤って解釈されないように、NULL をチェックするために == を使用しないでください。
この記事では、PHP における isset()、empty()、is_null() の使用法と違いを詳しく分析します。それらの違いを理解すると、開発者が変数ステータスをより正確に処理し、コードの安定性と可読性を向上させるのに役立ちます。