PHP8から、三項演算子でthrowによる例外処理ができるようになりました。
理由はthrowの文法が『文』から『式』に変わったから。
できそうでできなかったモヤッとした気持ちが解決してスッキリしたので、いい仕様変更だと思います。
使う機会も多そう。
まずはこのコードを見てください。
<?php
$flag = true;
$result = $flag ? 'OK' : throw new Exception();
echo $result . PHP_EOL;
$flag = false;
$result = $flag ? 'OK' : throw new Exception();
なんかできそうじゃないですか?
でもこのコード、PHP7以前はエラーになります。
php74の実行結果
PHP Parse error: syntax error, unexpected 'throw' (T_THROW) in /home/vagrant/php-test.php on line 4
throwの例外処理は式に見えるようで文だから。if, forなどと同じ。
中括弧({})を使わず、セミコロン(;)で終わるのに式じゃないというのがややこしい。
PHP8からは、throwは文から式に変わりました。これで上記のコードは実行可能です。
php80の実行結果
OK
PHP Fatal error: Uncaught Exception in /home/vagrant/php-test.php:9
Stack trace:
#0 {main}
thrown in /home/vagrant/php-test/php8-test.php on line 9
できそうでできなかったモヤモヤが晴れるいい仕様変更だと思います。
使う場面も多そうだし。
PHP公式ドキュメント