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

PHP8, 例外キャッチで変数がなくてもいい - 文法(シンタックス)の変更

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

例外をキャッチするとき、catch() の中で例外の変数を定義するのがこれまでのルールでしたが、PHP8からその変数がなくてもよくなりました。

この変数は必ずしも使うものではなく、使わないときただの無駄だったから。

ただし、例外のクラスは定義しないといけません。

まずは、これまでの例外のキャッチの方法を見てみましょう。

function test()
{
    throw new ErrorException();
}

try {
    test();
} catch (ErrorException $ex) {
    echo 'error !!!' . PHP_EOL;
    die();
}
実行結果
error !!!

このように、とりあえず例外を発生させるけども、あまり重要じゃないのでエラーメッセージとか一切設定しないこととかあります。

そういうとき、$ex を使わないことも多い。

ここは独自のエラーメッセージを入れたい、とかもそうですね?

こういうときこそ、PHP8から追加された記法が使えます。

try {
    test();
} catch (ErrorException) {
    echo 'error !!! non exception variable.' . PHP_EOL;
    die();
}
php80の実行結果
error !!! non exception variable.

普通、変数が定義されたらどこかで使ってると思うじゃないですか?

それなのに、例外の変数って意外と使わないことあるよね? という疑問から生まれた文法です。

もちろんですが、PHP7以前はシンタックスエラーになります。

php74の実行結果
PHP Parse error:  syntax error, unexpected ')', expecting '|' or variable (T_VARIABLE) in /home/vagrant/php-test.php on line 11

この文法はよく使いそう。

ちなみにPHPの公式ドキュメントでは、『catch で例外のキャプチャが不要になる』と表現しています。

この文法変更は7年前(2013年)から考えられてたそうですが、当時は例外の種類によらずなんでもキャッチするアイディアだったそうです。

2013年に考案された文法
try {
    test();
} catch {
    echo 'error !!!' . PHP_EOL;
    die();
}

さすがにこれは却下の嵐で実現しなかったらしい。

(もちろんPHP8でも実現されていない。シンタックスエラーになる。)

RFCでは、PHP8での変更が好評なので再検討してもいいんじゃないかと結んでいます。

(希望的観測で必ずやるとは言ってない。)

前の投稿
PHP8, パラメータの最後にカンマ(,)が付けられる - 文法(シンタックス)の変更
PHP8, namespaceの名前空間に予約語が使える。トークンとして扱うからできるんだって。
次の投稿
コメントを残す

*