php捕獲parse error 失敗?
漂亮男人
漂亮男人 2017-05-16 13:00:20
0
3
437

程式碼如下,已經註冊了錯誤處理函數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是故意寫的,為什麼異常都沒有被處理呢?

漂亮男人
漂亮男人

全部回覆(3)
洪涛

可以試試PHP7的try{}catch(Error){}

http://php.net/manual/en/clas...

ParseError extends Error 
PHPzhong

語法錯誤是最先被系統做出警告,屬於系統層級的異常,系統一警告,整個程式根本就都沒運作過。

迷茫

首先要明白異常跟錯誤是不一樣的,異常是出現正常邏輯之外的情況,而錯誤是指運行時出錯了!一旦出現錯誤,整個程式碼就不會再執行,你的程式也就掛了。而出現異常你可以使用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";
    }
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板