PHPのtry~catch構文でtryブロック内で呼び出された関数内で例外が発生した場合についての挙動調査

こんにちは、雑記ラビリンスです。今回はPHPのtry~catchについての記事です。

try~catchの記事は多くありますがtryブロックの中で使用された関数が例外を引き起こした時の挙動についての記事が ネット上で見当たりませんでした。 そのためこの記事ではtryブロック中で呼び出された関数が、その関数の中で例外を引き起こした際の挙動について紹介します。 PHPのバージョン:8.1.6

呼び出された関数が例外を引き起こした場合(呼び出し元関数内でtry~catchを使用していない場合)

<?php
try{

    $a = 10;
    $b = 0;
    $c = warizan($a,$b);
    echo $c;

}catch(Throwable $e){
    echo $e->getMessage();
}

function warizan($a,$b){
    return $a / $b;
    
}

tryブロック内でwarizan関数が呼び出されています。この中で0除算をしてみますと「Division by zero」メッセージが表示され catchブロックの方に処理が走っていることが分かります。 PHP try catch 例外

呼び出された関数が例外を引き起こした場合(呼び出し元関数内でtry~catchを使用している場合)

続いて呼び出し先の関数warizan関数内でtry~catchを使用した場合はどうなるでしょうか? warizan関数内を下のように改造します。

function warizan($a,$b){
    try{
    $result = $a / $b;
    }catch(Throwable $e){
        echo '0で割ることはできません';
    }
}

実行した結果、以下のようになりました。 PHP try catch 例外

この結果から呼び出し先の関数内でtry~catchを仕込んだ場合は呼び出し先内のcatchブロックで実行されたことが 分かるかと思います

PHPのtry~catchの挙動のまとめ

この記事のまとめです ①PHPではtryブロック内で使用された関数内で例外が発生した場合、catchブロック内の処理が実行される ②PHPではtryブロック内で使用された関数内でtry~catchを使用し、その中のtryブロック内で例外が発生した場合、 呼び出し先関数内のcatchブロックの処理が実行される。

プログラムを書いていて例外の挙動ってどうだっけと思った方は参考にしてもらえると幸いです。