ホームページ  >  記事  >  バックエンド開発  >  php の try catch でキャプチャされる例外例の詳細な説明、trycatch_PHP チュートリアル

php の try catch でキャプチャされる例外例の詳細な説明、trycatch_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:13:361243ブラウズ

PHPのtry catch、trycatchでキャプチャした例外例の詳細説明

この記事の例では、php で例外をキャッチする try catch について説明します。参考のためにみんなで共有してください。具体的な手法の分析は次のとおりです:

php で catch を試すと、プログラム コードで例外をキャッチできるため、不要なエラーをうまく処理できるようになります。興味のある方はぜひご覧ください。

PHP の try{}catch{} ステートメントの概要

PHP5 には、他の言語と同様の例外処理モジュールが追加されています。 PHP コードで生成された例外は、throw ステートメントでスローし、catch ステートメントでキャッチできます。 (注: 取得するには最初に投げる必要があります)

例外処理を必要とするコードは、考えられる例外をキャッチするために try コード ブロックに配置する必要があります。

すべてのトライには、少なくとも 1 つの対応するキャッチが必要です。

複数のキャッチを使用して、さまざまなクラスによって生成された例外をキャッチします。

try コード ブロックが例外をスローしなくなった場合、またはスローされた例外に一致するキャッチが見つからない場合、PHP コードは最後のキャッチにジャンプした後、実行を続行します。

もちろん、PHP では、catch ブロック内で例外を再度スローすることができます。

例外がスローされると、後続のコード (翻訳者注: 例外がスローされたコード ブロックを指します) は実行を続行せず、PHP は最初に一致するキャッチを見つけようとします。

例外がキャッチされず、対応する処理に set_Exception_handler() を使用する必要がない場合、PHP は重大なエラーを生成し、Uncaught Exception... (キャッチされない例外) プロンプト メッセージを出力します。

まず、PHP の組み込み例外クラスの基本的なプロパティとメソッドを見てみましょう。 (特定の実装を除く)

コードをコピーします コードは次のとおりです:
try{
}
キャッチ(){
新しい例外()をスローします;
}
キャッチ(){
//ここで、前のブロックによってスローされた例外をキャッチできます
}

さらに例外を処理するには、PHP で try{}catch{} を使用する必要があります。これには Try ステートメントと少なくとも 1 つの catch ステートメントが含まれます。例外をスローする可能性のあるメソッドを呼び出すコードはすべて、try ステートメントを使用する必要があります。 Catch ステートメントは、スローされる可能性のある例外を処理するために使用されます。以下は、getCommandObject() によってスローされた例外を処理する方法を示しています。

コードをコピーします コードは次のとおりです:
試してみてください{
$mgr = 新しい CommandManager();
$cmd = $mgr->getCommandObject("realcommand");
$cmd->execute();
} catch (例外 $e) {
print $e->getMessage();
exit();
}
?>
ご覧のとおり、PHP で throw キーワードを try{}catch{} と組み合わせて使用​​すると、クラス メソッドによって返される値が間違ったタグで「汚染」されることを回避できます。 「例外」自体は他のオブジェクトとは異なる PHP の組み込みタイプであるため、混乱することはありません。

例外がスローされた場合、try ステートメントのスクリプトは実行を停止し、すぐに catch ステートメントのスクリプトの実行に切り替わります。

例は次のとおりです:

インクルードファイルエラーにより例外がスローされる


コードをコピーします コードは次のとおりです:
// 間違ったデモ
試してみてください{
require ('test_try_catch.php');
} catch (例外 $e) {
echo $e->getMessage();
}

// 例外を正しくスローします

試してみてください{
if (file_exists('test_try_catch.php')) {
require ('test_try_catch.php');
} その他 {
throw new Exception('ファイルが存在しません');
}
} catch (例外 $e) {
echo $e->getMessage();
}

例外がスローされたがキャッチされなかった場合、致命的なエラーが発生します。

複数のキャッチは複数の例外をキャプチャします

PHP は一致する catch ブロックをクエリします。複数の catch ブロックがある場合、PHP がどの catch ブロックに入る必要があるかを見つけられるように、各 catch ブロックに渡されるオブジェクトは異なる型である必要があります。 try コード ブロックが例外をスローしなくなった場合、またはスローされた例外に一致するキャッチが存在しない場合、PHP コードは最後のキャッチにジャンプした後、実行を継続します。複数の例外をキャッチする例は次のとおりです:


コードをコピーします コードは次のとおりです:
クラス MyException は Exception{
を拡張します //最初のパラメーターのメッセージが必ず指定する属性になるようにコンストラクターを再定義します
パブリック関数 __construct($message, $code=0){
//ここで独自のコードの一部を定義できます
//すべての変数が割り当てられているかどうかを確認するために、同時にparent::construct()を呼び出すことをお勧めします
親 ::__construct($message, $code);
}
//親クラスから継承したメソッドを書き換えて、文字列の出力スタイルをカスタマイズします
パブリック関数 __toString(){
return __CLASS__.":[".$this->code."]:".$this->message."
";
}
//この例外の処理メソッドをカスタマイズします
パブリック関数customFunction(){
echo "このタイプの例外をカスタマイズした方法で処理します";
}
}

//カスタム拡張機能をテストするための例外クラス MyException を作成します
クラス TestException{
Public $var; // オブジェクトが正常に作成されたかどうかを判断するために使用されるメンバー属性
Function __construct($value=0){ //スローされる例外は、コンストラクター メソッドに値を渡すことで決定されます
Switch ($ Value) {// インレット値の選択的判断
ケース 1: // パラメーター 1 をブリーストし、カスタムの異常オブジェクトをスローします
throw new MyException("渡された値「1」は無効なパラメータです",5);break;
ケース 2: // パラメーター 2 を渡し、PHP 組み込みの異常なオブジェクトをスローします
Throw New MyException ("インレット値" 2 "はパラメーターとして使用できません", 6);                                                                                                                                                                                                                                                                                                                                                                                                                  }
}
}

//例 1、例外がない場合、プログラムは正常に実行され、try 内のすべてのコードが実行され、catch ブロックは実行されません
試してください{
$ Testobj = new testxception () // デフォルトパラメータを使用して異常なワイプオブジェクトを作成します
;echo "********
"; //例外がスローされない場合、このステートメントは通常通り実行されます
} Catch (MyException $ E) {// ユーザー定義の異常ブロックをキャプチャします
echo "カスタム例外をキャプチャ: $e
" // カスタマイズされた方法で例外メッセージを出力します
                                                                    }catch(例外 $e){ // オブジェクトをキャプチャしますPHP の組み込み例外処理クラス
echo "デフォルトの例外をキャプチャします:".$e->getMessage()."
" //例外メッセージを出力します
}
var_dump($testObj); // オブジェクトが正常に作成されたかどうかを判断します。例外がなければ、作成は成功です。
//例 2、カスタム例外をスローし、カスタム例外処理クラスを通じてこの例外をキャッチして処理します
試してください{
$testObj1 =new TestException(1); // 1 を渡すとカスタム例外がスローされます
echo "********
" //このステートメントは実行されません
} Catch (MyException $ E) {// この CATCH ブロック内のコードが実行されます
echo "カスタム例外をキャッチ: $e
"; $e->customFunction(); } Catch (Exception $ E) {// この CATCH ブロックは実行されません
echo "デフォルトの例外をキャッチします:".$e->getMessage()."
"; }
var_dump($testObj1); //例外が発生したため、このオブジェクトは正常に作成されませんでした

//例 2、組み込み例外をスローし、カスタム例外処理クラスを通じてこの例外をキャッチして処理します
試してください{
$ TestObj2 = New TestException (2) // 2 で合格し、組み込みの異常をスローします
; echo "********
" //このステートメントは実行されません
} catch(myexception $ e){ echo "カスタム例外をキャッチ: $e
"; $e->customFunction(); } Catch (Exception $ E) {// この CATCH ブロックは実行されません
echo "デフォルトの例外をキャッチします:".$e->getMessage()."
"; }
var_dump($testObj2); //例外が発生したため、このオブジェクトは正常に作成されませんでした
?>

上記のコードでは、2 つの例外処理クラスを使用できます。1 つはカスタム例外処理クラス MyException、もう 1 つは PHP の組み込み例外処理クラス Exception です。 try ブロック内でテスト クラス TestException のオブジェクトをそれぞれ作成し、構築メソッドで提供されるさまざまな数値パラメーターに従って、カスタム例外クラス オブジェクト、組み込み例外クラス オブジェクトをスローし、例外をスローせずに、対応する例外クラス オブジェクトにジャンプします。 catch ブロックで実行されます。例外が発生しない場合、実行のための catch ブロックには入らず、テスト クラス TestException のオブジェクトが正常に作成されます

この記事で説明した内容が皆様の PHP プログラミング設計に役立つことを願っています。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/915425.html技術記事 php、trycatch の try catch 例外の例の詳細説明 この記事では、php の try catch 例外の例について説明します。参考のためにみんなで共有してください。具体的なメソッドは次のように分析されます: try catch in php can...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。