PHP には、Exception と ErrorException という 2 つの例外クラスがスケジュールされています
コードをコピーします コードは次のとおりです:
例外 {
/* 属性 */
Protected string $message; //例外メッセージの内容
Protected int $code //例外コード番号
Protected string $file; //例外をスローしたファイル名
Protected int $line //例外がスローされたファイル内の行番号
/* メソッド */
Public __construct ([ string $message = "" [, int $code = 0 [, Exception $previous = null]]] )
Final public string getMessage (void) //例外によってスローされたメッセージ
Final public Exception getPrevious (void) //前の例外
最終的な public int getCode (void) //例外コード、これはユーザー定義です
Final public string getFile (void) //例外が発生したファイルパス
Final public int getLine (void) //例外が発生した行
最終的なパブリック配列 getTrace (void) //例外追跡情報 (配列)
Final public string getTraceAsString (void) //例外追跡情報 (string)
Public string __toString (void) //例外オブジェクトを文字列として直接使用しようとした場合のサブ関数呼び出しの戻り値
Final private void __clone (void) //例外オブジェクトのクローン作成時に呼び出されます
}
コードをコピーします コードは次のとおりです:
ErrorException は例外 {
を拡張します
/* 属性 */
protected int $重大度 ;
/* メソッド */
public __construct ([ string $message = "" [, int $code = 0 [, int $severity = 1 [, string $filename = __FILE__ [, int $lineno = __LINE__ [, Exception $previous = NULL ]]]]] ])
Final public int getSeverity (void)
/* 継承されたメソッド */
最終的なパブリック文字列 Exception::getMessage (void)
最終的なパブリック例外 Exception::getPrevious (void)
最終的な public int Exception::getCode (void)
最終的なパブリック文字列 Exception::getFile (void)
最終的な public int Exception::getLine (void)
最終的なパブリック配列 Exception::getTrace (void)
最終的なパブリック文字列 Exception::getTraceAsString (void)
パブリック文字列 Exception::__toString (void)
最終プライベート void 例外::__clone (void)
}
それでは、どうやって例外をキャッチするのでしょうか?
(1) PHP は try...catch... を使用して例外をキャッチできます。例外処理のコードは try コード ブロック内にある必要があります。
コードをコピーします コードは次のとおりです:
試してみてください{
新しい例外をスローします('例外テスト 1', 1001);
} catch(例外 $e) {
echo $e->getMessage().'-'.$e->getCode();
}
(2) ユーザーは、try/catch でキャプチャされない例外に対する例外処理関数 [set_Exception_handler] をカスタマイズできます。
コードをコピーします コードは次のとおりです:
関数例外ハンドラー ( $e ) {
echo "キャッチされない例外: " , $e -> getMessage (), "n" ;
}
set_Exception_handler ( '例外ハンドラー' );
新しい例外をスローします ( 'キャッチされない例外' );
echo "この行は実行されません";
ser_Exception_handler コールバック関数を使用して例外を処理すると、後続のコードは実行を継続できませんが、try-catch は実行できることがわかります。
(3) PHP は複数の catch を使用してさまざまなタイプの例外をキャッチし、catch コード ブロック内で例外を再度スローできるようにします。
コードをコピーします コードは次のとおりです:
//実際の状況に応じて例外クラスを拡張してください
クラス MyException は例外 {
を拡張します
パブリック関数 __construct($message = '', $code = 0) {
}
パブリック関数 myFunction() {
「テスト用」にエコーします;
}
}
試してみてください{
new MyException('エラー') をスローします;
} catch (MyException $e) {
echo $e->myFunction();
} catch (例外 $e) {
echo $e->getMessage();
}
(4) PHP5.5 では、finally キーワードがサポートされているため、例外がオーバーフローするかどうかを気にする必要はありません。
次のように比較できます:
コードをコピーします コードは次のとおりです:
関数 doSomething() {
$resource = createResource();
{
を試してください
$result = useResource($resource);
} catch (例外 $e) {
releaseResource($resource);
Log($e->getMessage());
exit();
}
ReleaseResource($resource);
$result を返します;
}
//使用後やっと
関数 doSomething2() {
$resource = createResource();
{
を試してください
$result = useResource($resource);
return $result;
} catch (例外 $e) {
Log($e->getMessage());
exit();
}ついに{
releaseResource($resource);
}
}