ホームページ > バックエンド開発 > PHPチュートリアル > PHP によるエラーと例外の処理方法: 包括的なガイド

PHP によるエラーと例外の処理方法: 包括的なガイド

Susan Sarandon
リリース: 2024-12-28 17:14:09
オリジナル
538 人が閲覧しました

How PHP Handles Error and Exception Handling: A Comprehensive Guide

PHP はエラーと例外処理をどのように処理しますか?

PHP では、エラー例外 の処理は、堅牢で安全なアプリケーションを維持するために不可欠です。エラーと例外を適切に処理すると、アプリケーションが予測どおりに動作し、ユーザーに有意義なフィードバックが提供され、デバッグや将来の改善のために問題が記録されるようになります。この記事では、PHP におけるエラーと例外の違い、PHP によるエラーの処理方法、エラーと例外処理のベスト プラクティスについて説明します。


1. PHP でのエラー処理

PHP の エラー とは、プログラムの実行中に発生し、予期しない動作を引き起こし、多くの場合スクリプトの終了につながる状況を指します。 PHP には、エラーを処理および応答するためのいくつかの組み込みメカニズムが用意されています。

エラーの種類:

PHP には、発生する可能性のあるさまざまな種類のエラーがあります。

  • 解析エラー (構文エラー): PHP がスクリプトの解析中に問題 (セミコロンの欠落、括弧の不一致など) に遭遇した場合に発生します。
  • 致命的エラー: これらのエラーは、存在しないメソッドへの関数呼び出しや存在しないファイルの組み込みなど、PHP が回復できない問題に遭遇したときに発生します。
  • 警告エラー: 警告によってスクリプトの実行は停止されません。これらは、存在しないファイルが含まれているなど、PHP が回復できる問題を示しています。
  • エラーの通知: 通知は警告よりも重大度が低くなります。これらは、未定義の変数などの潜在的な問題を示していますが、スクリプトの実行は停止しません。

エラー報告レベル:

PHP では、error_reporting() 関数を使用するか、php.ini ファイルで error_reporting ディレクティブを設定することによって、どのタイプのエラーを報告するかを制御できます。

// Report all errors except E_NOTICE
error_reporting(E_ALL & ~E_NOTICE);

// Report all errors, including notices
error_reporting(E_ALL);

// Suppress all errors
error_reporting(0);
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

最も一般的なエラー報告レベルは次のとおりです:

  • E_ERROR: 致命的な実行時エラー。
  • E_WARNING: 致命的ではない実行時エラー。
  • E_NOTICE: 実行時の通知。
  • E_ALL: すべてのエラー、警告、通知。

エラーの処理:

組み込みの PHP 関数を使用してエラーを処理できます。

  • set_error_handler(): PHP エラーが発生するたびに呼び出されるカスタム エラー ハンドラーを定義します。

例:

// Custom error handler function
function customError($errno, $errstr) {
    echo "Error [$errno]: $errstr";
}

// Set custom error handler
set_error_handler("customError", E_WARNING);

// Trigger a warning error
echo $undefined_variable;  // This will call the custom error handler
ログイン後にコピー
ログイン後にコピー
  • trigger_error(): カスタム エラーを手動でトリガーするために使用されます。

例:

// Report all errors except E_NOTICE
error_reporting(E_ALL & ~E_NOTICE);

// Report all errors, including notices
error_reporting(E_ALL);

// Suppress all errors
error_reporting(0);
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

2. PHP での例外処理

例外は、実行時エラーをより適切に処理できるようにするメカニズムです。従来のエラーとは異なり、例外を使用するとエラーを捕捉し、制御された方法で処理できます。

例外のスロー:

PHP では throw キーワードを使用して例外をスローできます。例外がスローされると、プログラムの通常のフローが中断され、制御は例外を処理できる最も近い キャッチ ブロック に渡されます。

// Custom error handler function
function customError($errno, $errstr) {
    echo "Error [$errno]: $errstr";
}

// Set custom error handler
set_error_handler("customError", E_WARNING);

// Trigger a warning error
echo $undefined_variable;  // This will call the custom error handler
ログイン後にコピー
ログイン後にコピー

例外のキャッチ:

例外をキャッチするには、try-catch ブロックを使用します。 try ブロックには例外をスローする可能性のあるコードが含まれており、catch ブロックには例外を処理するコードが含まれています。

// Trigger a custom user error
trigger_error("This is a custom error!", E_USER_NOTICE);
ログイン後にコピー

例外オブジェクト:

例外がキャッチされると、例外クラスのオブジェクトが catch ブロックに渡されます。このオブジェクトには、次のような例外に関する有用な情報が含まれています。

  • getMessage(): エラー メッセージを返します。
  • getCode(): 例外コード (指定されている場合) を返します。
  • getFile(): 例外がスローされたファイルを返します。
  • getLine(): 例外がスローされた行番号を返します。
  • getTrace(): 例外のスタック トレースを返します。

カスタム例外クラス:

PHP の組み込み Exception クラスを拡張することで、カスタム例外クラスを定義できます。これにより、キャッチして別の方法で処理できる、より具体的なタイプの例外を作成できます。

// Throwing an exception
throw new Exception("Something went wrong!");
ログイン後にコピー

3.キャッチされなかった例外

例外がスローされたがどの catch ブロックでもキャッチされなかった場合、PHP は 致命的エラー を生成し、例外がキャッチされなかったことを示すメッセージを表示します。これを防ぐには、スローされる可能性のある例外に対応する適切な try-catch ブロックがコードに含まれていることを常に確認してください。


4.エラーと例外処理のベスト プラクティス

a.例外には Try-Catch を使用します:

  • 特にデータベース エラー、ファイル処理エラー、ネットワークの問題などのシナリオで、ランタイム エラーや例外的な条件を処理するには、例外を使用します。
  • try-catch ブロックを使用して例外をキャッチし、適切に処理します (例外をログに記録する、ユーザーフレンドリーなメッセージを表示する、リカバリを試行するなど)。

b.さまざまなタイプのエラーを個別に処理します:

  • 予期される重大でない問題 (ファイルの欠落や存在しない変数など) については、set_error_handler() で エラー処理 を使用します。
  • スクリプトを終了する必要がある、または特別な処理 (データベース接続の失敗など) を必要とする重大な問題については、例外を使用してください。

c.エラーと例外をログに記録します:

  • デバッグ目的で、エラーと例外を常にエラー ログ ファイルに記録します。これは、詳細なエラーをエンドユーザーに表示したくない運用環境では特に重要です。

php.ini のエラーログの例:

// Report all errors except E_NOTICE
error_reporting(E_ALL & ~E_NOTICE);

// Report all errors, including notices
error_reporting(E_ALL);

// Suppress all errors
error_reporting(0);
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

d.ユーザーに分かりやすいエラーメッセージを表示:

  • 運用環境では、生のエラー メッセージをユーザーに表示しないようにする必要があります。代わりに、一般的なエラー メッセージを表示し、開発者向けに詳細を記録します。

え。カスタム例外処理ロジックを使用する:

  • 一時的な問題 (データベース接続の失敗など) に対する再試行ロジックなど、追加のコンテキストや動作を提供するカスタム例外クラスを作成します。

5. PHP エラーおよび例外処理フロー

  1. エラー:

    • PHP は、エラー報告レベルに基づいてエラーをチェックします。
    • エラー (警告や通知など) が発生した場合、set_error_handler() を使用して設定されている場合、エラー ハンドラーがトリガーされます。
    • 致命的なエラーまたは解析エラーにより、スクリプトの実行が停止します。
  2. 例外:

    • try ブロック内で例外がスローされた場合、PHP は直ちに制御を対応する catch ブロックに移します。
    • 一致する catch ブロックが存在しない場合、例外はキャッチされず、致命的なエラーがトリガーされます。

結論

PHP では、アプリケーションが予期しない状況を適切に処理するために、エラー例外 の両方の処理が重要です。 エラーは通常、構文エラーや警告などの差し迫った問題に使用されますが、例外は実行時の問題を処理するためのより堅牢かつ柔軟な方法を提供します。違いを理解し、適切なコンテキストで適切なアプローチを使用することで、より信頼性が高く保守しやすい PHP アプリケーションを作成できます。


以上がPHP によるエラーと例外の処理方法: 包括的なガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート