PHPにおける例外処理方法のまとめ、PHPの処理方法のまとめ
この記事の例は、PHP の例外処理メソッドをまとめたものです。参考のためにみんなで共有してください。具体的な分析は次のとおりです:
例外がトリガーされると、通常は次のようなことが起こります: 他の言語と同様のエラー例外処理モジュールが PHP5 に追加されました。 PHP コードで生成された例外は、throw ステートメントでスローし、catch ステートメントでキャッチできます。例外処理が必要なコードは、発生する可能性のある例外をキャッチするために try コード ブロックに配置する必要があります。すべてのトライには少なくとも 1 つの対応するキャッチが必要です。
複数の catch を使用して、異なるクラスによって生成された例外をキャッチします。try コード ブロックが例外をスローしなくなった場合、またはスローされた例外に一致する catch が見つからない場合、PHP コードは後で最後の catch にジャンプして実行を継続します。もちろん、PHP ではキャッチ コード ブロック内で例外を再度スローすることができます。例外がスローされると、後続のコード (翻訳者注: 例外がスローされたコード ブロックを指します) は実行を継続しません。最初に一致するキャッチを見つけます。例外がキャッチされず、対応する処理に set_Exception_handler() を使用する必要がない場合、PHP は重大なエラーを生成し、Uncaught Exception...(キャッチされなかった例外) プロンプト情報を出力します。
1. 例外クラスの階層関係、コードは次のとおりです。
コードをコピーします コードは次のとおりです:class NotFoundException extends Exception{}
InputException クラスは Exception を拡張します{}
クラス DBException は例外を拡張します{}
2. キャッチされなかった例外のハンドラーを設定します。コードは次のとおりです。
コードをコピーします
コードは次のとおりです: functionException_uncaught_handler(Exception $e) {
header('コンテンツタイプ:text/html; charset=utf-8');
if ($e インスタンスof NotFoundException)
exit($e->getMessage());
elseif ($e インスタンスオブ DBException)
exit($e->getMessage());
それ以外は
exit($e->getMessage());
}
set_Exception_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カスタム例外ハンドラーを使用する具体的な方法です。
phpのサンプルコードは次のとおりです:
コードをコピーします
コードは次のとおりです:
クラスcustomExceptionは例外を拡張します
{
パブリック関数 errorMessage()
{
//エラーメッセージ
$errorMsg = '.$this->getFile() の '.$this->getLine() 行でエラーが発生しました
.':
'.$this->getMessage().' は有効な電子メール アドレスではありません
;
$errorMsg を返す
}
}
$email = "someone@example.com";
試してみてください
{
//
かどうかを確認する
if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE)
{
//メールが無効な場合は例外をスローします
新しいカスタム例外($email)をスローします
}
// メールアドレスに「example」が含まれているかを確認します
if(strpos($email, "例") !== FALSE)
{
throw new Exception("$email は電子メールの例です");
}
}
キャッチ (カスタム例外 $e)
{
エコー $e->errorMessage();
}
catch(例外 $e)
{
エコー $e->getMessage();
}
?>
説明例: 上記のコードは 2 つの条件をテストします。いずれかの条件が true でない場合は、例外がスローされます。
1.customException() クラスは古い例外クラスの拡張として作成されるため、古いクラスのすべてのプロパティとメソッドが継承されます。
2. errorMessage() 関数を作成します。電子メール アドレスが不正な場合、この関数はエラー メッセージを返します。
3. 「try」コード ブロックを実行すると、最初の条件では例外はスローされません。
4. 電子メールには文字列「example」が含まれているため、2 番目の条件により例外がトリガーされます。
5. 「catch」コード ブロックは例外をキャッチし、適切なエラー メッセージを表示します。
customException をキャッチせず、基本例外をしっかりとキャッチした場合は、そこで例外を処理し、例外がスローされたときに、標準とは異なる方法で処理することが必要な場合があります。 「catch」コード ブロックで例外が再度スローされます。コードは次のとおりです:
概要: PHP 例外を使用するには 3 つの手順があります:
ステップ 1: 例外クラスを定義します。定義されていない場合は、システムのデフォルトの例外クラスを使用します。
ステップ 2: 例外が発生した場合、 throw を使用して例外をスローします (例: ex1($num2); 例外のパラメーターは $num2 で、これは例外の getMessage() を使用して取得されます。
ステップ 3: 例外をトリガーし、try 句を使用し、条件が満たされた場合に throw new ex1($num);
ステップ 4: 例外 catch (ex2 $e) をキャッチします。これは、定義された例外クラス ex2 を $e としてインスタンス化するのと同等です。
複数の例外を定義できますが、トリガーできるのは 1 つだけであることに注意してください。つまり、catch でキャプチャできる例外は 1 つだけです。
基本的な例外クラス、例外をスローできる関数を作成します:
コードをコピーします
コードは次のとおりです:
関数番号($num){
if ($num>1){//例外スロー条件
$msg="値は 1 より大きくすることはできません";//例外メッセージ
throw new Exception($msg);//例外をスローします
}
echo "値は 1 未満です";
}
//「try」コードブロックで例外をトリガーします
{
を試してください
番号(3);
echo "正常に実行されました"
}
//例外をキャッチします
catch (例外 $e){
echo "エラーメッセージ:".$e->getMessage();//Exception() システムメソッドで例外情報を取得します
echo "Error file:".$e->getFile();//Exception() のシステムメソッドは例外ファイル名を取得します
echo "行数:".$e->getLine();//異常行数を取得するException()のシステムメソッド
}
//=============================================== ======================
エコー "
=========================================== ============
";
//基本例外クラスを拡張する
function checkEmail($email){//EMAIL の有効性を判断するために例外をスローできる関数を定義します
if (filter_var($email,FILTER_VALIDATE_EMAIL)==false){
throw new checkEmailException($email);//例外をスローし、パラメータとして EMAIL を使用します
}
echo "メールは正当です";
}
class checkEmailException extends Exception{// 拡張例外クラスを定義します
パブリック関数 errormsg(){
$msg="エラーの理由: ".$this->getMessage()." は有効な EMAIL アドレスではありません!";
$msg.="エラー ファイル名:".$this->getFile();
$msg.="エラー行番号:".$this->getLine();
$msg をエコーします。
}
}
$email="メール…..@chhua.com";
try {//例外をトリガーします
checkEmail($email);
}
//例外をキャッチします
catch (checkEmailException $e){
$e->エラーメッセージ();
}
//================================== 複数の例外のキャプチャ
エコー "
=========================================== =======
";
class ex1 extends Exception{//例外クラスを定義します
パブリック関数 msg(){
$msg="エラーの理由: ".$this->getMessage()." は 100
を超えています
";
$msg.="エラー ファイル:".$this->getFile()."
";
$msg.="エラー コード:".$this->getCode()."
";
$msg.="行数:".$this->getLine()."
";
$msg をエコーします。
}
}
class ex2 extends Exception{//例外クラスを定義します
パブリック関数 msg(){
$msg="エラーの理由: ".$this->getMessage()." は 100
に等しいです
";
$msg.="エラー ファイル:".$this->getFile()."
";
$msg.="行数:".$this->getLine()."
";
$msg をエコーします。
}
}
$num2=100;
{
を試してください
if ($num2>100){//条件が満たされたときにトリガーします
新しい ex1($num2) をスローします
}
if ($num2==100){//条件が満たされたときにトリガーします
新しい ex2($num2) をスローします。
}
}
catch (ex2 $e){// トリガーされた例外をキャッチします
$e->msg();
}
catch (ex1 $e){// トリガーされた例外をキャッチします
$e->msg();
}
この記事で説明した内容が皆様の PHP プログラミング設計に役立つことを願っています。
http://www.bkjia.com/PHPjc/940486.html
www.bkjia.com
true
http://www.bkjia.com/PHPjc/940486.html
技術記事
phpの例外処理方法まとめ、phpの例外処理方法まとめ この記事ではphpの例外処理方法を例を交えてまとめています。参考のためにみんなで共有してください。具体的な分析は次のとおりです: 例外がトリガーされると、...