da202308051601
@da202308051601

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

PHPで0で割り算した時の例外がキャッチできない

Q&A

Closed

解決したいこと

PHPで0で割り算した時の例外をキャッチできるようにしたいです。

発生している問題・エラー

0で割り算した箇所をtry,ctachで囲んでいますが例外がキャッチできずに、
そのまま処理が落ちてしまいます。

該当するソースコード

以下の関数を呼び出しています。

    private function divideBy0(){ 
        try {
            Log::debug("divideBy0_L362");
            // 例外が発生する可能性がある処理
            $num = 0;
            echo 10 / $num;
        } catch (Throwable $e) {
            Log::debug("divideBy0_L367");
            Log::error("[divideBy0でエラーが発生] " . $e->getMessage());
            // 例外を再スローするか、適切なエラーメッセージを返すなどの処理を行う
            throw $e;
        }
    }

ログには以下のように出力されます。
うまくcatchの中に入っていないようです。

[2023-12-27 11:27:56] local.DEBUG: divideBy0_L362  
[2023-12-27 11:27:56] local.ERROR: Division by zero {"exception":"[object] (DivisionByZeroError(code: 0): Division by zero at /var/www/html/lpar/app/Http/Controllers/ItemController.php:365)
[stacktrace]
#0 /var/www/html/lpar/app/Http/Controllers/ItemController.php(100): App\\Http\\Controllers\\ItemController->divideBy0()

自分で試したこと

chatGPTに聞いたら
catch (Exception $e) ではなく
catch (Throwable $e)とすると
Exception だけでなく Error などもキャッチできるようになります。 と回答されたので試してみましたが、
やはりcatchの中に入ってくれませんでした。

環境

いただいたdockerでapache使って動かしています。

0

2Answer

Comments

  1. @da202308051601

    Questioner

    ありがとうございます。
    この記事の通り
    } catch (\Throwable $e) {
    としたら例外キャッチできるようになりました。

PHP8.3
try {
    $num = 0;
    echo 10 / $num;
} catch (Throwable $e) {
    echo'error: ' . $e->getMessage();
}

// error: Division by zero

キャッチすることを確認できました。

catch (Throwable $e)とすると

変更が反映された状態で確認できているでしょうか?

1Like

Your answer might help someone💌