<?phpclass a { public function a1 () { try { throw new Exception('123'); } catch (Exception $e) { throw $e; } }}class b { public function b1 () { try { $a = new a(); $a->a1(); } catch (Exception $e) { throw $e; //throw new Exception($e->getMessage()); } }}class c { public function c1 () { try { $a = new b(); $a->b1(); } catch (Exception $e) { throw $e; } }}try { $c = new c(); $c->c1();} catch (Exception $e) { echo $e->getTraceAsString();}echo 'end';?>
ログイン後にコピー
try catch ページで c の c1 を使用し、c1 で b の b1 を使用し、b1 で a の a1 を使用します。
デフォルトは、a1 で例外をスローし、b1 で a1 の例外をキャッチし、次に今例外をスローし、c1 がそれをキャッチしてスローし、最後にページがそれをキャプチャして出力します。
結果は次のようになります:
.php(28): b->b1()
#2 D:workspacemyzCollectiontest.php(37): c->c1()
#3 C:Program FilesZendZendStudio-5.2.0binphp5dummy。 php(1): include ('D:workspacemy...')
#4 {main}end
2 番目のテスト:
b1 の throw $e を削除します。つまり、スローされません。
結果は次のようになります:
getMessage());Open。
b1 より上の呼び出しが a1 の例外を取得できないように、新しい例外をスローします。
結果は次のようになります:
.php(37): c->c1()
#2 C:Program FilesZendZendStudio-5.2.0binphp5dummy.php(1): include('D:workspacemy...')
#3 {main}end
4 番目のテスト:
b1 の try catch throw をすべて削除します。
結果:
元の例外は引き続き出力されます。これは、中間ステップをスローする必要がなく、最上位層が最下位層によってスローされた例外を取得することもできることを意味します。
b に例外がある場合、それを取得する方法がありません。b を検出する必要がある場合は、b に try catch も追加する必要があります。
X-Powered-By: PHP/5.1 .1
コンテンツの種類: text/html
#0 D:workspacemyzCollectiontest.php(16): a->a1()
#1 D:workspacemyzCollectiontest.php(28): b->b1()
#2 D: workspacemyzCollectiontest.php(37): c->c1()
#3 C:Program FilesZendZendStudio-5.2.0binphp5dummy.php(1): include('D:workspacemy...')
#4 {メイン}エンド