2014-02-14 38 views
1

我想知道是否有辦法恢復本機PHP處理程序,我知道有restore_error_handler,但我不知道可以調用多少個set_error_handlers。我想在PHP.net上看一個評論(http://www.php.net/manual/en/function.set-error-handler.php#113517),他說:「如果你想要確保調用本地PHP錯誤處理程序而不重置處理程序堆棧(就像set_error_handler(null)那樣),你可以簡單地。打電話的set_error_han dler與$ error_types設置爲零,這可能是特別使用全與如error_get_last()結合:PHP重置錯誤/異常處理程序回到本地?

// var_dump or anything else, as this will never be called because of the 0 
set_error_handler('var_dump', 0); 
@$undef_var; 
restore_error_handler(); 

」但我通過他的意思混淆,他的意思是,如果我叫set_error_handler(null)它會重置爲本地或?

編輯:看過一些PHP源代碼後,看起來set_error_handler(null)是php 5.5及以上版本。所以這是行不通的。所以我想回到我原來的問題,我如何重置爲本地,而不知道有多少set_error_handler's在哪裏調用?

回答

1

正如PHP文檔所述,在PHP 5.5 - source中添加了傳遞nullset_error_handler

由於來自同一頁面尼古拉斯的評論中提到,解決方法是通過任何函數作爲第一個參數set_error_handler,並通過0作爲第二個參數。作爲一個例子:

<?php 

    // turn on error reporting 
    error_reporting(-1); 

    // $bar is not set, native PHP error will be thrown 
    $foo = $bar; 

    // overwrite the error handler a few times 
    set_error_handler(function(){ var_dump(1); }); 
    set_error_handler(function(){ var_dump(2); }); 
    set_error_handler(function(){ var_dump(3); }); 

    // $bar is not set, result of var_dump(3), will be shown 
    $foo = $bar; 

    // restore native handler 
    set_error_handler('count', 0); 

    // $bar is not set, native PHP error will be thrown 
    $foo = $bar; 

?> 
+0

我假設爲例外相同的作品? – Steven