ツイート
シェア
LINEで送る
B! はてぶでブックマーク
Pocketでブックマーク
RSSフィード

PHP8, 例外処理(throw)がNull合体演算子で使えるようになった。

php
イラストダウンロードサイト【イラストAC】
の画像をもとに加工しています。

Null合体演算子(??)は、null値に特化した三項演算子みたいなものです。

PHP8から、このNull合体演算子にthrowによる例外処理ができるようになりました。

理由はthrowの文法が『文』から『式』に変わったから。

これで、『nullだったら例外発生』の処理が1行でできるようになります。

もうif文はいらない。

まずはこのコードを見てください。

<?php

$str = '123';
$result = $str ?? throw new Exception();

echo $str . PHP_EOL;

$str = null;
$result = $str ?? throw new Exception();

echo $str . PHP_EOL;

このコードはできるようでできません。throwは式に見えて文だから。if, forと同じ。

中括弧({})を使わず、セミコロン(;)で終わるのに式じゃないのがややこしい。

php74の実行結果
PHP Parse error:  syntax error, unexpected 'throw' (T_THROW) in /home/vagrant/php-test.php on line 4

ちゃんと動くコードにするにはこうする必要がありました。

if ( !isset($str) ) {
    throw new Exception();
}

これがPHP8からは、Null合体演算子でも実行可能になります。throwの例外処理が文から式に変わったから。

php80の実行結果
PHP Fatal error:  Uncaught Exception in /home/vagrant/php-test.php:9
Stack trace:
#0 {main}
  thrown in /home/vagrant/php-test/.php on line 9

これでもう、わざわざif文で書く必要はないですね?

このコードはこれから、けっこう見るようになるんじゃないかな?

ちなみに、Null合体演算子は、nullかどうか見るので、空文字('')はtrueになります。

$str = '';
$result = $str ?? throw new Exception();

echo 'isset not equal empty' . PHP_EOL;
php80の実行結果
isset not equal empty

PHP公式ドキュメント

Null合体演算子

また、PHP8では似たようなものにNullsafe演算子というものが追加されました。あわせてこちらもどうぞ。

前の投稿
PHP8, 例外処理(throw)が三項演算子で使えるようになった。
PHP8, ::classがクラスオブジェクトでも使える。get_class() と同じ。
次の投稿
コメントを残す

*