[PHP] NULL判定を行う演算子
変数の値がNULLの時に初期値を設定するようなコードは、これまでif文でisset関数やempty関数、is_null関数などを使って判定し初期値を代入していましたが、NULL判定用の条件演算子、NULL判定用の代入演算子を使うことで簡潔に記述できるようになりました。
NULL判定を行う条件演算子
構文
変数 ?? 初期値
[実装例]変数のNULL判定
以下の例では、変数$var1、$var2、$var3、$var4に対してNULLの場合に初期値を代入しています。
注意する点としては、対象の変数が未定義の場合($var2)もNULLとして扱われ、空文字($var3)の場合はNULLとして扱われない点です。
コード
$var1 = null;
//$var2
$var3 = "";
$var4 = 1;
$var1 = $var1 ?? 'default';
$var2 = $var2 ?? 'default';
$var3 = $var3 ?? 'default';
$var4 = $var4 ?? 'default';
echo "var1=", $var1, "\n";
echo "var2=", $var2, "\n";
echo "var3=", $var3, "\n";
echo "var4=", $var4, "\n";
実行結果
$ php test_null.php var1=default var2=default var3= var4=1
NULL判定を行う代入演算子
構文
変数 ??= 初期値
[実装例]変数のNULL判定
代入演算子を使って記述すると、上記のコードをさらに簡潔に記述することが出来ます。実行すると同じ結果になります。
$var1 = null;
//$var2
$var3 = "";
$var4 = 1;
$var1 ??= 'default';
$var2 ??= 'default';
$var3 ??= 'default';
$var4 ??= 'default';
echo "var1=", $var1, "\n";
echo "var2=", $var2, "\n";
echo "var3=", $var3, "\n";
echo "var4=", $var4, "\n";
$ php test_null.php var1=default var2=default var3= var4=1
nullsafe演算子
nullsafe演算子はPHP8で導入された演算子です。これを使うとクラスのメソッドが意図せずnullを返却したとき、メソッドチェーンで呼び出される後続のメソッドを停止することが出来ます。
nullsafe演算子の構文
nullsafe演算子はメソッド呼び出し時に?を付けて呼び出します。
{インスタンス}?->{メソッド}
[実装例]nullsafe演算子
コード
以下の例では、getInstanceメソッドでクラスのインスタンスを返してほしいところをnullを返しています。しかし呼び出し側ではnullsafe演算子を使って呼び出しているため、特にエラーになることなく実行できます。
class Test {
public function getInstance() {
echo __METHOD__, "\n";
return null;
}
public function getValue() {
echo __METHOD__, "\n";
return 'value';
}
}
$test = new Test();
$var = $test?->getInstance()?->getValue();
echo "var = ", $var, "\n";
実行結果
実行結果を確認するとエラーは発生せず、またgetInstanceの結果がnullのためgetValueは呼び出されずに終了していることが分かります。
$ php test_nullsafe.php Test::getInstance var =
コメント
コメントを投稿