搜尋

首頁  >  問答  >  主體

php捕獲parse error 失敗?

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

漂亮男人漂亮男人2779 天前448

全部回覆(3)我來回復

  • PHP中文网

    PHP中文网2017-05-16 13:02:20

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

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

    ParseError extends Error 

    回覆
    0
  • PHPz

    PHPz2017-05-16 13:02:20

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

    回覆
    0
  • 迷茫

    迷茫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";
        }

    回覆
    0
  • 取消回覆