c の C1 はページ try catch で使用され、b の b1 は c1 で使用され、a の a1 は b1 で使用されます。
デフォルトは、a1 で例外をスローし、b1 で a1 の例外をキャッチしてから、先ほど例外をスローし、c1 がそれをキャッチしてスローし、最後にページがそれをキャプチャして出力します。
結果は次のようになります:
X-Powered-By: PHP/5.1.1
Content-type: 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 {main}end
2 番目のテスト:
b1 の throw $e を削除すると、スローされなくなります。
結果は次のようになります:
X-Powered-By: PHP/5.1.1
Content-type: text/html
終了
3 番目のテスト:
b1 で throw new Exception($e->getMessage()); をオンにします。
b1 より上の呼び出しが a1 の例外を取得できないように、新しい例外をスローします。
結果は次のようになります:
X-Powered-By: PHP/5.1.1
Content-type: text/html
#0 D:workspacemyzCollectiontest.php(28): b->b1()
#1 D:workspacemyzCollectiontest.php(37): c->c1()
#2 C:Program FilesZendZendStudio-5.2.0binphp5dummy .php(1): include('D:workspacemy...')
#3 {main}end
4 番目のテスト:
B1 のトライ キャッチ スローをすべて削除します。
結果: すべて正常です。つまり、中間ステップをスローする必要はなく、最上位層は最下位層によってスローされた例外を受け取ることもできます。
b に例外がある場合、それを取得する方法がありません。b を検出する必要がある場合は、b
X-Powered-By: PHP にも try catch を追加する必要があります。 /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 {main}end
class 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 789;
?>