程式碼如下,已經註冊了錯誤處理函數register_shutdown_function都沒有執行,很奇怪
error_reporting(-1);
ini_set('display_errors', 1);
set_error_handler(function(){
echo "error handler execute";
}, E_ALL);
set_exception_handler(function(){
echo "exception handler execute";
});
register_shutdown_function(function(){
echo "shutdown function execute";
});
try{
0$a;
}catch(exception $e){
echo "catch exception";
}finally{
echo "finally ";
}
執行結果:
Parse error: syntax error, unexpected '$a' (T_VARIABLE) in C:\Users\mao\Documents\php\index.php on line 18
PHP Parse error: syntax error, unexpected '$a' (T_VARIABLE) in C:\Users\mao\Documents\php\index.php on line 18
[Finished in 0.1s]
0$a是故意寫的,為什麼異常都沒有被處理呢?
PHP中文网2017-05-16 13:02:20
可以試試PHP7的try{}catch(Error){}
http://php.net/manual/en/clas...
ParseError extends Error
迷茫2017-05-16 13:02:20
首先要明白異常跟錯誤是不一樣的,異常是出現正常邏輯之外的情況,而錯誤是指運行時出錯了!一旦出現錯誤,整個程式碼就不會再執行,你的程式也就掛了。而出現異常你可以使用try catch捕捉到,而且程式還可以繼續運作!
很明顯,你的程式碼有語法錯誤,那麼這段程式根本執行不了,也就是說你這裡是觸發了一個錯誤而不是異常。那麼要如何達到你想要的效果呢?首先就要解決文法問題,看下面程式碼
error_reporting(-1);
ini_set('display_errors', 1);
set_error_handler(function(){
echo "error handler execute";
}, E_ALL);
set_exception_handler(function(){
echo "exception handler execute";
});
register_shutdown_function(function(){
echo "shutdown function execute";
});
try{
echo $a;
}catch(exception $e){
echo "catch exception";
}