2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

株式会社カオナビAdvent Calendar 2024

Day 21

そのExceptionをおにぎりにしますか?

Last updated at Posted at 2024-12-20

この記事は株式会社カオナビ Advent Calendar 2024の21日目の記事です。

おにぎらずが好きです

PHPにおける例外(Exception)の基本

例外(Exception)とは?

プログラムの実行中に発生するエラーや異常を処理するためのメカニズムです。

PHP 内で例外がスローされ (throw され)、それが 捕捉され (catch され) ます。発生した例外を 捕捉するには、コードを try ブロックで囲みます。
マッチする catch ブロックが見つからない場合は、 グローバルな例外ハンドラが設定されていない限り fatal error となり、 プログラムが終了します。
https://www.php.net/manual/ja/language.exceptions.php

基本的な構文

PHPではtryブロック内で例外がスローされると、catchブロックでその例外をキャッチして処理します。

構文の例:

try {
    // 例外が発生するコード
    throw new Exception("エラーが発生しました。");
} catch (Exception $e) {
    // 例外をキャッチして処理する
    echo "例外がキャッチされました: " . $e->getMessage();
    // 再スロー
    throw $e;
}
echo "処理は継続しています";

実行結果

例外がキャッチされました: エラーが発生しました。
Fatal error: Uncaught Exception: エラーが発生しました。 

おにぎりとは

Exceptionを補足し、再スローせずに処理を継続することです。
Exceptionを握りつぶす、の意味でおにぎりと言います。

try {
    // 例外が発生するコード
    throw new Exception("エラーが発生しました。");
} catch (Exception $e) {
    // 例外をキャッチして処理する
    echo "例外がキャッチされましたが握りつぶします: " . $e->getMessage();
    // 再スローしない
}
echo "処理は継続しています";

実行結果

例外がキャッチされましたが握りつぶします: エラーが発生しました。処理は継続しています 

おにぎり注意点

すべてのExceptionを握りつぶすことはしないほうがいいです。
アプリケーションの状態が不整合になったり、デバッグや監視が困難になったりする可能性があります。

特定のケースに当てはまる場合は、おにぎりしたい

あるケースに当てはまる場合だけおにぎりしたい場合、
特定のExceptionクラスを作ってそのExceptionだけ、おにぎりするといったやり方がよいでしょう。

class MyOnigiriException extends Exception {}

try {
    throw new MyOnigiriException("おにぎりしたいカスタム例外が発生しました");
} catch (MyOnigiriException $e) {
    echo "おにぎりします: " . $e->getMessage();
}

上記の場合、MyOnigiriExceptionはおにぎりされますが
それ以外のExceptionはスローされます。

特定のケースとはどういったものでしょうか?

特定のケースとはどういったものが考えられるでしょうか?
処理自体は成功にして、エラーがあったことをログを出すだけでとどめたい場合が考えられます。

例えば

  • ログファイルの書き込み失敗やログ通知の失敗
    ログファイルの書き込みやログ通知の失敗はアプリケーションの正常な動作には不要であるため、失敗しても例外をスローせずに処理を続行することが考えられます。

  • 処理終了後の一時ファイルの削除などのお掃除処理
    アプリケーションの終了時に一時ファイルの削除などが失敗した場合、例外をスローせずに処理を続行することが考えられます。

  • オプションの機能
    ユーザーが特定のオプション機能を使用するとき(例えば、操作ガイドモードなど)、その機能がうまく動かなくても基本機能には影響しない場合、その例外を握りつぶすことが考えられます。

まとめ

PHPの例外処理は、エラーの発生箇所とその処理を分離し、
堅牢なアプリケーションを作るための強力なツールです。
日々の開発にぜひ役立ててください!

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?