この記事では、[php マニュアル] の例外処理を紹介します。これを必要とする友人に参照してもらいます
PHP 5
try コード ブロック (スロー) でスローされます。例外、catch コード ブロックで例外をキャッチします
すべての試行には、対応する catch ブロックまたはfinally ブロックが少なくとも 1 つ必要です。
スローされるオブジェクトは、Exception クラスまたは Exception のサブクラスのインスタンスである必要があります。それ以外の場合は、PHP の致命的なエラーが発生します。
try { throw new Exception('异常提示语'); //throw 123; //Fatal error: Uncaught Error: Can only throw objects //throw new stdClass(); //Fatal error: Uncaught Error: Cannot throw objects that do not implement Throwable } catch (Exception $e) { echo $e->getMessage(); }
複数の catch ブロックを使用して、さまざまなカテゴリの例外をキャッチできます。
通常の実行 (try ブロック内で例外がスローされない場合) は、シーケンス内で定義された最後の catch ブロックの後に続行されます。例外は catch ブロックでスロー (または再スロー) できます。
例外がスローされると、ステートメントに続くコードは実行されず、PHP は最初に一致する catch ブロックを見つけようとします。
PHP 5.5 以降では、catch ブロックの後、またはその代わりに、finally ブロックを指定することもできます。
例外がスローされるかどうかに関係なく、finally ブロック内のコードは常に try ブロックと catch ブロックの後、通常の実行が再開される前に実行されます。Example #4 Exception handling with a finally block(用finally块处理异常)<?phpfunction inverse($x) { if (!$x) { throw new Exception('pision by zero.'); } return 1/$x; }try { echo inverse(5) . "\n"; } catch (Exception $e) { echo 'Caught exception: ', $e->getMessage(), "\n"; } finally { echo "First finally.\n"; }try { echo inverse(0) . "\n"; } catch (Exception $e) { echo 'Caught exception: ', $e->getMessage(), "\n"; } finally { echo "Second finally.\n"; }// Continue executionecho "Hello World\n";?>
Example #5 Nested Exception (嵌套异常)<?phpclass MyException extends Exception { }class Test { public function testing() { try { try { throw new MyException('foo!'); } catch (MyException $e) { // rethrow it throw $e; } } catch (Exception $e) { var_dump($e->getMessage()); } } }$foo = new Test;$foo->testing();?>
Note set_exception_handler()设置用户自定义的异常处理函数 Exception::getMessage 获取异常消息内容
以上が[PHPマニュアル]例外処理の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。