php の例外処理方法のまとめ。必要な方はこの記事を参照してください。
例外がトリガーされると、通常は次のことが起こります:
他の言語と同様のエラー例外処理モジュールが PHP5 に追加されました。 PHP コードで生成された例外は、throw ステートメントでスローし、catch ステートメントでキャッチできます。例外処理が必要なコードは、発生する可能性のある例外をキャッチするために try コード ブロックに配置する必要があります。すべてのトライには少なくとも 1 つの対応するキャッチが必要です。複数のキャッチを使用して、さまざまなクラスによって生成された例外をキャッチします。 try ブロックが例外をスローしなくなった場合、またはスローされた例外に一致する catch が見つからなかった場合、PHP コードは最後の catch にジャンプした後、実行を続行します。もちろん、PHP では、catch ブロック内で例外を再度スローすることができます。例外がスローされると、後続のコードは実行を続行せず、PHP は最初に一致するキャッチを見つけようとします。例外がキャッチされず、set_Exception_handler() を使用して適切に処理されなかった場合、PHP は重大なエラーを生成し、Uncaught Exception... (キャッチされなかった例外) メッセージを出力します。
1. 例外クラスの階層関係:
コードは次のとおりです | コードをコピーします |
class NotFoundException extends Exception{} class InputException extends Exception{} class DBException extends Exception {} |
2. キャッチされなかった例外のハンドラーを設定します。
コードは次のとおりです | コードをコピーします |
functionException_uncaught_handler(Exception $e) header('Content-type:text/html ; charset=utf-8' ); if ($e インスタンス of NotFoundException) exit($e->getMessage()); elseif ($e インスタンス of DBException) exit($e->getMessage()); else exit($ e->getMessage()); } set_Exception_handler('Exception_uncaught_handler');
|
3. DBException 例外を手動でスローするが、try を使用しない場合。 ...catch でキャプチャすると、例外は PHP カスタム例外ハンドラーになります
コードは次のとおりです | コードをコピー |
Exception_uncaught_handler() 関数の処理:
$this->resConn = mysql_connect ($CONFIGS['db_host'], $CONFIGS[' db_user'], $CONFIGS['db_pwd']); if (false == is_resource($this->resConn)) throw new DBException('データベース接続失敗しました。'.mysql_error($this->resConn) );
4. ビジネス ロジックの概要:
if (0 != strcmp($curAlbum->interest_id, $it)) throw new NotFoundException('申し訳ありませんが、アクセスしたアルバムは存在しません');上記はPHPカスタム例外ハンドラーの具体的な使い方です
例
コードは以下の通りです | コードをコピー |
classcustomException extends Exception { public function errorMessage() { / /エラー メッセージ $errorMsg = '.$this->getFile() の '.$this->getLine().' 行でエラーが発生しました。': '.$this- >getMessage ().' は有効な電子メール アドレスではありません'; return $errorMsg; } } $email = "someone@example.com";try { // if を確認します if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE) { // 電子メールが有効でない場合は例外をスローします throw newcustomException($email); } //「例」を確認しますメールアドレス内 if(strpos($email, "example") !== FALSE) { throw new Exception("$email はサンプルメールです"); } }
catch (customException $e ) { echo $e->errorMessage(); }
catch(Exception $e){ echo $e->getMessage(); } ?>
|
例の説明: 上記のコードは 2 つの条件をテストします。いずれかの条件が true でない場合は、例外がスローされます。
1.customException() クラスは、古い例外クラスの拡張として作成されます。このようにして、古いクラスのすべてのプロパティとメソッドを継承します。 2. errorMessage() 関数を作成します。電子メール アドレスが無効な場合、この関数はエラー メッセージを返します。 3. 「try」コード ブロックを実行すると、最初の条件では例外はスローされません。 4. 電子メールには文字列「example」が含まれているため、2 番目の条件により例外がトリガーされます。 5. 「catch」コード ブロックは例外をキャッチし、適切なエラー メッセージを表示します。 customException がキャッチされない場合は、基本例外がしっかりとキャッチされ、例外はそこで処理されます。
例外の再スロー 例外がスローされたときに、標準の方法とは異なる方法で処理したい場合があります。例外は「catch」ブロックで再度スローできます。
コードは次のとおりです | コードをコピーします | /* */ /* * 概要: PHP 例外を使用するには 3 つの手順があります: * 最初のステップ:例外クラスを定義します。定義されていない場合は、システムのデフォルトの例外クラスを使用します。 * ステップ 2: ex1($num2) など、例外が発生したときに例外をスローします。そして、例外の getMessage() でそれを取得します; * ステップ 3: 例外をトリガーし、try 句を使用し、条件が満たされた場合 throw new ex1($num); * ステップ 4: 例外をキャッチします catch (ex2 $e)これは、定義された例外をインスタンス化するのと同等です。クラス ex2 は $e; * * 複数の例外を定義できますが、トリガーできるのは 1 つだけであることに注意してください。つまり、catch でキャプチャできる例外は 1 つだけです */ / /========== ======基本例外クラス //例外をスローできる関数を作成する function num($num){ if ($num>1){//例外スロー条件 $msg="数値は 1 より大きくすることはできません";//例外メッセージ throw new Exception($msg);//例外をスローします } echo “値は 1 未満です”; } //「try」コード ブロックで例外をトリガーします try { num(3); echo "実行は正常です"; } //例外をキャッチします catch (Exception $e){ echo "エラー メッセージ:" .$e->getMessage();//Exception() 例外情報を取得するシステムメソッド echo "Error file:".$e->getFile();//例外ファイルを取得するException()のシステムメソッドname echo "行番号:".$e->getLine( );//Exception() のシステムメソッドで例外行数を取得します } //============ ====================== =========================== =========== エコー「 ==== ============================ ====================== == ”; //基本例外クラスを拡張します 関数 checkEmail($email){// EMAIL の有効性を判断するために例外をスローできる関数 if (filter_var($email,FILTER_VALIDATE_EMAIL)== false){ throw new checkEmailException($email);//EMAIL をパラメーターとして使用して例外をスローします } echo "電子メールは合法です"; } class checkEmailException extends Exception{//拡張例外クラスを定義します public function errormsg() { $msg="エラー理由: ".$this->getMessage()." は、合法的な電子メールアドレス! ”; $msg.=”エラーファイル名:”.$this->getFile(); $msg.=”エラー行番号:”.$this->getLine(); echo $msg; } } $email="email…..@chhua.com"; try {//例外をトリガーする checkEmail($email); } //例外をキャッチする catch (checkEmailException $e){ $e ->errormsg(); } //================================== 複数の例外をキャプチャ エコー「 =========================================== ========= ”; class ex1 extends Exception{//例外クラスを定義する public function msg(){ $msg=”Errorreason:”.$this->getMessage ()."100 より大きい "; $msg.="エラー ファイル:".$this->getFile()." "; $msg.="エラー コード:"。 $ this->getCode().” ”; $msg.=”行数:”.$this->getLine().” ”; echo $msg; } } class ex2 extends Exception{//例外クラスを定義します public function msg(){ $msg="エラー理由: ".$this->getMessage()." は 100 " に等しい" ; $msg .=”エラー ファイル:”.$this->getFile().” ”; $msg.=”行数:”.$this->getLine().” ” ; echo $msg; } } $num2=100; try { if ($num2>100){// 条件が満たされたときにトリガーされます throw new ex1($num2); } if ($ num2==100){// 条件が満たされたときにトリガーされます throw new ex2($num2); } } catch (ex2 $e){// トリガーされた例外をキャッチします $e ->msg(); } catch (ex1 $e){//トリガーされた例外をキャッチします $e->msg(); } /* * 概要: PHP 例外を使用するには 3 つの手順があります: * 最初のステップ: 例外クラスを定義します。定義されていない場合は、システムのデフォルトの例外クラスを使用します。* ステップ 2: 例外が発生した場合、 throw を使用して例外をスローします (例: ex1($num2); 例外のパラメーターは、例外の getMessage() によって取得されます * ステップ 3: トリガー例外の場合は、 try 句を使用します。条件が満たされた場合は throw new ex1($num); * ステップ 4: 例外をキャッチします catch (ex2 $e)。これは、定義された例外クラス ex2 を $e; としてインスタンス化するのと同等です。 * * 注: 複数の例外を定義できますが、トリガーできるのは 1 つだけです。つまり、catch を使用してキャプチャできる例外は 1 つだけです */ ?> |
http://www.bkjia.com/PHPjc/444676.htmlwww.bkjia.com本当http://www.bkjia.com/PHPjc/444676.html技術記事 PHP の例外処理メソッドの概要が必要な友人は、この記事を参照してください。 例外がトリガーされると、通常は次のようなことが起こります。 他の言語と同様のエラー例外処理モジュールが PHP5 に追加されました。 ...
|