2012-11-16 62 views
1

我已經嘗試使用此:異常處理程序在關閉時不起作用?

$error_handler = function($severity, $message, $filename, $lineno) { 
    throw new ErrorException($message, 0, $severity, $filename, $lineno); 
}; 

$exception_handler = function($exception) { 
    self::invokeHttpError(500); 
}; 

set_error_handler($error_handler, E_ALL | E_STRICT); 
set_exception_handler($exception_handler); 

然而,當我把這種失敗:

$fn = function() { 
    $application->test(); // $application is undefined 
}; 
$fn(); 

錯誤處理程序被調用,而不是異常處理程序。發生什麼事?

+0

你怎麼知道沒有被調用? –

+0

調用默認的異常處理程序。 –

回答

2

解引用未定義的對象會導致致命錯誤,並且不可捕捉錯誤。這就是爲什麼當這種情況發生時你的異常處理程序和錯誤處理程序不被調用

雖然這種行爲真的讓我感到憤怒,但我希望它會變成可捕獲的異常。

更新

有一兩件事你可以做,以遏制這一問題是拋出你的常規錯誤處理程序內的ErrorException。這會在解引用一個未定義的符號時阻止不可捕捉的致命錯誤。

+0

你是對的,即使在關閉問題發生之外。這很糟糕。 –

+0

我聽到你:)這總是迫使我閱讀我的服務器日誌以及我的應用程序日誌,以確定一個實時系統是否遇到任何問題。這也被稱爲死亡btw的白色屏幕。真的很煩人。 –

相關問題