ホームページ >バックエンド開発 >PHPチュートリアル >PHPにおける例外処理方法のまとめ、PHPの処理方法のまとめ_PHPチュートリアル

PHPにおける例外処理方法のまとめ、PHPの処理方法のまとめ_PHPチュートリアル

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBオリジナル
2016-07-13 10:10:01735ブラウズ

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

tru​​e

http://www.bkjia.com/PHPjc/940486.html

技術記事

phpの例外処理方法まとめ、phpの例外処理方法まとめ この記事ではphpの例外処理方法を例を交えてまとめています。参考のためにみんなで共有してください。具体的な分析は次のとおりです: 例外がトリガーされると、...


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。