我得到了一個產生錯誤的概率爲50:50的代碼。它全部在類對象中完成。對象中的任何方法都可能產生錯誤。我該怎麼做才能讓方法棧中深處的函數產生一個錯誤,以便返回到第一個函數run?如何立即結束堆棧執行(PHP)?
像這樣: 1.通話功能1 2.功能1調用函數2 3.功能2調用功能3 4.功能3產生一個錯誤,並提供了陣列與 錯誤定義權FUNCTION1
我知道例外是正確的(用try-catch塊封裝一個函數),但是我仍然無法使它在3個函數深度堆棧中捕獲Exception。我怎麼做?
我得到了一個產生錯誤的概率爲50:50的代碼。它全部在類對象中完成。對象中的任何方法都可能產生錯誤。我該怎麼做才能讓方法棧中深處的函數產生一個錯誤,以便返回到第一個函數run?如何立即結束堆棧執行(PHP)?
像這樣: 1.通話功能1 2.功能1調用函數2 3.功能2調用功能3 4.功能3產生一個錯誤,並提供了陣列與 錯誤定義權FUNCTION1
我知道例外是正確的(用try-catch塊封裝一個函數),但是我仍然無法使它在3個函數深度堆棧中捕獲Exception。我怎麼做?
異常是這樣做的正確方法。捕捉異常(普通類)是一種不好的做法。
您應該拋出具體/自定義異常。
看http://php.net/manual/en/spl.exceptions.php,改變你的throw
更多especific和具體例外
避免
throw new Exception('foo');
相反
throw new RuntimeException('foo');
你有什麼試過?它很簡單,真的:
<?php
function function1() {
try {
function2();
}
catch(Exception $e) {
// Exception from function4 bubbles up.
}
}
function function2() {
function3();
}
function function3() {
function4();
}
function function4() {
throw new Exception();
}
異常確實是你想要的,它們可以在任何級別上工作。向我們展示您的代碼,以便我們可以告訴您爲什麼它不適合您。 – deceze
在某處深處拋出異常並在更高級別捕獲它。你從那得到什麼? – PeeHaa
另外官方手冊有一些例子,你可能想看看:http://php.net/manual/en/language.exceptions.php – PeeHaa