ホームページ >バックエンド開発 >PHPチュートリアル >コードデバッグでの PHP 例外処理メソッド_PHP チュートリアル
Exception は、指定されたエラーが発生したときにスクリプトの通常のフローを変更するために使用されます。
例外とは何ですか?
PHP 5 は、エラー処理に対する新しいオブジェクト指向アプローチを提供します。
例外処理は、指定されたエラー (例外) 状況が発生したときにスクリプトの通常のフローを変更するために使用されます。この状況を例外と呼びます。
例外がトリガーされると、通常は次のことが起こります:
現在のコードステータスが保存されます
コードの実行は、事前定義された例外ハンドラー関数に切り替えられます
状況に応じて、プロセッサは保存されたコード状態からコード実行を再開するか、スクリプト実行を終了するか、コード内の別の場所からスクリプト実行を継続することがあります
さまざまなエラー処理方法を示します:
例外の基本的な使い方
カスタム例外ハンドラーを作成する
複数の例外
例外を再スローします
最上位の例外ハンドラーを設定する
例外の基本的な使い方
例外がスローされると、次のコードは実行を続行できず、PHP は一致するコードの「キャッチ」ブロックを見つけようとします。
例外がキャッチされず、対応する処理に set_Exception_handler() を使用する必要がない場合は、重大なエラー (致命的なエラー) が発生し、「Uncaught Exception」(キャッチされない例外) のエラー メッセージが出力されます。
例外をキャッチせずにスローしてみましょう:
//例外関数を含む関数を作成します
checkNum($number) {
if($number>1) {
throw new Exception("値は 1 以下である必要があります");
true を返します。
}
//トリガー
例外チェック番号(2);
?>
上記のコードでは次のようなエラーが発生します:
致命的エラー: キャッチされない例外 メッセージ付きの例外 C:webfolder est.php:6 の値は 1 以下である必要があります スタック トレース: #0 C:webfolder est.php(12): checkNum(28) #1 {main} がスローされましたC:webfolderest.php 6行目
上記の例のエラーを回避するには、例外を処理する適切なコードを作成する必要があります。
処理手順には以下を含める必要があります:
Try - 例外を使用する関数は、「try」ブロック内に置く必要があります。例外がトリガーされない場合、コードは通常どおり実行を続行します。ただし、例外がトリガーされると、例外がスローされます。
Throw - 例外をトリガーする方法を指定します。各「スロー」は少なくとも 1 つの「キャッチ」に対応する必要があります
Catch - 「catch」コード ブロックは例外をキャッチし、例外情報を含むオブジェクトを作成します
例外をトリガーしましょう:
1) { throw new Exception("値は 1 以下である必要があります") } return true; /「try」コードブロックで例外をトリガーします try { checkNum(2); //例外がスローされた場合、このテキストは表示されません echo これが表示される場合、番号は 1 以下です }//例外をキャッチします。例外 $e) { echo メッセージ: .$e->getMessage() }?>
メッセージ: 値は 1 以下である必要があります
上記のコードは例外をスローし、それをキャッチします。
checkNum()関数を作成します。数値が 1 より大きいかどうかを検出します。その場合は、例外をスローします。
checkNum() 関数で例外がスローされる
「catch」コード ブロックは例外を受け取り、例外情報を含むオブジェクト ($e) を作成します。
この例外オブジェクトから $e->getMessage() を呼び出して、この例外からのエラー メッセージを出力します
ただし、「すべてのスローはキャッチに対応する必要がある」という原則に従うために、見逃したエラーを処理する最上位の例外ハンドラーをセットアップできます。
カスタム例外クラスを作成する
カスタム例外ハンドラーの作成は非常に簡単です。 PHP で例外が発生したときに関数を呼び出すことができる特殊なクラスを作成しただけです。このクラスは例外クラスの拡張である必要があります。
このカスタム例外クラスは、PHP の例外クラスのすべてのプロパティを継承し、カスタム関数を追加できます。
例外クラスの作成を開始します:
classcustomException extends Exception {
パブリック関数 errorMessage() {
//エラーメッセージ
$errorMsg = .$this->getFile() の行 .$this->getLine() でエラーが発生しました。: .$this->getMessage().有効な電子メール アドレス; $errorMsg を返します。
}
}
$email = "someone@example...com";試してください {
//
かどうかを確認する
if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE) {
//メールが有効でない場合は例外をスローします throw
新しいカスタム例外($email);
}
}キャッチ (カスタム例外 $e)
{
//カスタムメッセージを表示する
echo $e->errorMessage();
}?>
この新しいクラスは、古い例外クラスのコピーに errorMessage() 関数を加えたものです。古いクラスのコピーであるため、古いクラスからプロパティとメソッドが継承され、getLine()、getFile()、getMessage() などの例外クラスのメソッドを使用できます。
説明:
CustomException() クラスは、古い例外クラスの拡張として作成されました。このようにして、古いクラスのすべてのプロパティとメソッドを継承します。
$email 変数を不正な電子メール アドレス文字列に設定します
電子メール アドレスが無効であるため、「try」コード ブロックを実行して例外をスローします
「catch」コード ブロックは例外をキャッチし、エラー メッセージを表示します
複数の例外
スクリプトに複数の例外を使用して、複数の状況を検出できます。
複数の if..else コード ブロックまたは switch コード ブロックを使用したり、複数の例外をネストしたりできます。これらの例外は、異なる例外クラスを使用し、異なるエラー メッセージを返す可能性があります:
classcustomException extends Exception{public function errorMessage(){
//エラー
message$errorMsg = .$this->getFile() の .$this->getLine() 行でエラーが発生しました。.$this->getMessage().有効な電子メール アドレス;
$errorMsg を返します;
}
}
$email = "someone@example.com";試してください {
//
かどうかを確認する
if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE) {
//メールが無効な場合は例外をスローします throw new
カスタム例外($email);
}
// メールアドレスに「example」が含まれているかを確認します
if(strpos($email, "example") !== FALSE) { throw new Exception("$email はサンプルの電子メールです") } }catch (customException $e) { echo $e->errorMessage( ); }catch(Exception $e) { echo $e->getMessage() }?>
説明例:
上記のコードは 2 つの条件をテストします。いずれかの条件が true でない場合は、例外がスローされます。
CustomException() クラスは、古い例外クラスの拡張として作成されました。このようにして、古いクラスのすべてのプロパティとメソッドを継承します。
errorMessage() 関数を作成します。電子メール アドレスが無効な場合、この関数はエラー メッセージを返します。
コードの「try」ブロックを実行すると、最初の条件では例外はスローされません。
「catch」コード ブロックは例外をキャッチし、適切なエラー メッセージを表示します
CustomException がキャッチされず、基本例外がキャッチされた場合、例外はそこで処理されます。
例外を再スローします
例外がスローされたときに、標準とは異なる方法で例外を処理したい場合があります。例外は「catch」ブロックで再度スローできます。
スクリプトはシステムエラーをユーザーから隠す必要があります。システム エラーはプログラマにとって重要かもしれませんが、ユーザーはそれらに興味がありません。ユーザーが簡単にできるように、わかりやすいメッセージを付けて例外を再度スローできます。
//エラーメッセージ
$errorMsg = $this->getMessage() は有効な電子メール アドレスではありません。; return $errorMsg } }$email = "someone@example.com";try { try {
// メールアドレスに「example」が含まれているかを確認します
if(strpos($email, "例") !== FALSE) {
//メールが無効な場合は例外をスローします throw new
例外($email); } } catch(例外 $e) {
// 例外を再スローし、新しいものをスローします
カスタム例外($email); } }キャッチ(カスタム例外 $e) {
//カスタムメッセージを表示する
echo $e->errorMessage() }?>
説明例:
上記のコードは、電子メール アドレスに文字列「example」が含まれているかどうかを検出します。その場合は、再度例外をスローします:
CustomException() クラスは、古い例外クラスの拡張として作成されました。このようにして、古いクラスのすべてのプロパティとメソッドを継承します。
errorMessage() 関数を作成します。電子メール アドレスが無効な場合、この関数はエラー メッセージを返します。
$email 変数を有効なメール アドレスに設定しますが、文字列「