ホームページ > バックエンド開発 > PHPチュートリアル > php_PHP チュートリアルの例外処理メソッドの概要

php_PHP チュートリアルの例外処理メソッドの概要

WBOY
リリース: 2016-07-20 11:10:54
オリジナル
773 人が閲覧しました

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カスタム例外ハンドラーの具体的な使い方です


コードは以下の通りですコードをコピー


例の説明:
上記のコードは 2 つの条件をテストします。いずれかの条件が true でない場合は、例外がスローされます。

1.customException() クラスは、古い例外クラスの拡張として作成されます。このようにして、古いクラスのすべてのプロパティとメソッドを継承します。
2. errorMessage() 関数を作成します。電子メール アドレスが無効な場合、この関数はエラー メッセージを返します。
3. 「try」コード ブロックを実行すると、最初の条件では例外はスローされません。
4. 電子メールには文字列「example」が含まれているため、2 番目の条件により例外がトリガーされます。
5. 「catch」コード ブロックは例外をキャッチし、適切なエラー メッセージを表示します。
customException がキャッチされない場合は、基本例外がしっかりとキャッチされ、例外はそこで処理されます。

例外の再スロー
例外がスローされたときに、標準の方法とは異なる方法で処理したい場合があります。例外は「catch」ブロックで再度スローできます。

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();
}
?>

コードは次のとおりです コードをコピーします

/*
*/
/*
* 概要: 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 つだけです
*/
?>


www.bkjia.com本当http://www.bkjia.com/PHPjc/444676.html技術記事 PHP の例外処理メソッドの概要が必要な友人は、この記事を参照してください。 例外がトリガーされると、通常は次のようなことが起こります。 他の言語と同様のエラー例外処理モジュールが PHP5 に追加されました。 ...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート