複数種類の例外をtry-catchした時の挙動


はじめに

PHPの公式ドキュメントを見ていて,複数の例外クラスにまたがるtry-catchの処理を1つのcatchブロックで行う方法が触れられていたので,それについて行った簡単な実験を紹介します。
環境:XAMMP, PHP7.4.5

問題の公式ドキュメント


引用元:例外についてのPHP公式ドキュメント

思ったこと

tryブロックの中で複数のクラスから例外がthrowされたらどうなる?

実験

test.php
<?php try {
    throw new PDOException("PDOの例外だよ");
    throw new Exception("普通の例外だよ");
} catch (PDOException | Exception $e) {
    echo $e->getMessage();
}

実行結果


注:Chromeでのスクリーンショットです。
1つ目のthrowで処理がcatchに飛び,2つ目(Exceptionクラス)はthrowされませんでした。

まとめ

そもそも複数クラス例外が同時に発生すること自体が致命的なのでそうならないようにしておくというのが大前提ではあるものの,tryブロックで複数の例外が発生している場合,1つ目のthrowによって飛ばされた2つ目のthrowを見逃す可能性は無きにしも非ず。まだまだ駆け出し&初投稿ですがぽつぽつと続けていければと思います。