はじめに
基本的にプログラミング言語は値の代入されていない変数へアクセスしようとすると初期化前の領域への参照としてエラーが発生します。
それを回避するためには変数の値が初期化済みか事前に検証を行う必要があります。
他言語だと、以下のよう書くケースもありますが、php では判定用の専用メソッドが用意されています。
$value == null
php では isset , empty , is_null といった関数を使用して値判定を実行します。
ここからは各メソッドの役割、および実際の使い方について説明します。
各メソッドの役割と使い分け
基本的にプログラミングにおける if は true の場合に実行したい処理を書くことが基本です。
そのため各判定用メソッドの意味合いを正確に把握することが大切と言えるでしょう。
各メソッドの動作は以下の通りです。
各メソッドの動作
メソッド | 動作 |
isset | 値が格納されている場合に true 、null の場合は false の値を発生させる。 |
empty | 値が格納されていない場合に true 、そうでない場合に false の値を発生させる。 |
is_null | 値が null である場合に true 、そうでない場合に false が戻り値となる。 |
実利用時の戻り値例
名称 | 種別 | 未定義変数 | NULL | 0 | String(“”) | String(“aiueo”) | 空配列 |
isset | 言語構造 | False | False | True | True | True | True |
empty | 言語構造 | True | True | True | True | False | True |
is_null | 関数 | True | True | False | False | False | False |
言語構造とは言語そのものにハードコーディングされた処理を指し、関数よりも先に参照されることから処理速度が早いという特徴があります。
そのためこれらの判定処理を行う場合は isset や empty を使用すると無駄を減らすことが可能です。
「値が入っているかを確かめて、もし値が存在しなかったらエラーを発生させたい」といった場合は判定条件が正となるため isset。
「値が入っていなかった場合、デフォルト値を代入したい」といった場合は判定条件が負となるため empty を使うと良いですね。
あくまでもこれらの処理は変数の値の有無を検証するためだけに存在するため isset 等は空配列 でも True となる場合があり検証には向かない場合もあります。
配列の要素が存在するかを確認したい場合は「count」を用いたり、要素番号を直接指定する「isset( $value[0] )」といった方法で検証を行う必要があることに注意しましょう。
「!empty($value)」とすることも可能ですが、「値が入っていたら」という条件に対しての操作であるにも関わらず empty を用いると否定条件の if 文となり可読性が落ちるため推奨できません。
最後に、上記のパターンを検証したサンプルと実行結果を記載しますため、参考にご覧ください。
尚、is_null は未定義変数を判定しようとすると 警告表示 notice となるため省略したリストとなります。
ご承知おきください。
サンプル
<?php
// Your code here!
$nullValue = null;
$intValue = 0;
$strEmptyValue = "";
$strValue = "aiueo";
$arrayValue = [];
echo( isset( $value ) ? "未定義変数 は isset において true" : "未定義変数 は isset において false");
echo("\n");
echo( isset( $nullValue ) ? "nullValue は isset において true" : "nullValue は isset において false");
echo("\n");
echo( isset( $intValue ) ? "intValue は isset において true" : "intValue は isset において false" );
echo("\n");
echo( isset( $strEmptyValue ) ? "strEmptyValue は isset において true" : "strEmptyValue は isset において false" );
echo("\n");
echo( isset( $strValue ) ? "strValue は isset において true" : "strValue は isset において false" );
echo("\n");
echo( isset( $arrayValue ) ? "arrayValue は isset において true" : "arrayValue は isset において false" );
echo("\n");
echo("\n");
echo( empty( $value ) ? "未定義変数 は empty において true" : "未定義変数 は empty において false");
echo("\n");
echo( empty( $nullValue ) ? "nullValue は empty において true" : "nullValue は empty において false");
echo("\n");
echo( empty( $intValue ) ? "intValue は empty において true" : "intValue は empty において false" );
echo("\n");
echo( empty( $strEmptyValue ) ? "strEmptyValue は empty において true" : "strEmptyValue は empty において false" );
echo("\n");
echo( empty( $strValue ) ? "strValue は empty において true" : "strValue は empty において false" );
echo("\n");
echo( empty( $arrayValue ) ? "arrayValue は empty において true" : "arrayValue は empty において false" );
echo("\n");
echo("\n");
echo( is_null( $nullValue ) ? "nullValue は is_null において true" : "nullValue は is_null において false");
echo("\n");
echo( is_null( $intValue ) ? "intValue は is_null において true" : "intValue は is_null において false" );
echo("\n");
echo( is_null( $strEmptyValue ) ? "strEmptyValue は is_null において true" : "strEmptyValue は is_null において false" );
echo("\n");
echo( is_null( $strValue ) ? "strValue は is_null において true" : "strValue は is_null において false" );
echo("\n");
echo( is_null( $arrayValue ) ? "arrayValue は is_null において true" : "arrayValue は is_null において false" );
?>
実行結果
未定義変数 は isset において false
nullValue は isset において false
intValue は isset において true
strEmptyValue は isset において true
strValue は isset において true
arrayValue は isset において true
未定義変数 は empty において true
nullValue は empty において true
intValue は empty において true
strEmptyValue は empty において true
strValue は empty において false
arrayValue は empty において true
nullValue は is_null において true
intValue は is_null において false
strEmptyValue は is_null において false
strValue は is_null において false
arrayValue は is_null において false
以上となります。
それでは良き php ライフを!