2017-07-19 38 views
1
error_reporting(-1); 

set_error_handler(function ($level, $message, $file = '', $line = 0) { 
    echo '1--------------NOTICE or WARNING'; 
}); 

set_error_handler(function ($level, $message, $file = '', $line = 0) { 
    echo '2--------------NOTICE or WARNING'; 

    set_error_handler(function($level, $message, $file = '', $line = 0) { 
     echo '3--------Handler'; 
    }); 
    restore_error_handler(); 
}); 

$arr = []; 
var_dump($arr["a"]); 
var_dump($arr["b"]); 

輸出:PHP restore_error_handler不能按預期

2--------------NOTICE or WARNINGNULL 
1--------------NOTICE or WARNINGNULL 

phpversion:7.0.10

如上的輸出,它似乎restore_error_handler在處理程序不會像往常一樣工作。

我希望error_handler去2,但error_handler回到1

回答

0

這很奇怪,但它似乎並不具有回調函數的工作。我不知道爲什麼。儘管如此,這作品:

function foo1() {echo "<br>1<br>";} 
function foo2() {echo "<br>2<br>"; restore_error_handler();} 
function foo3() {echo "<br>3<br>"; restore_error_handler();} 

set_error_handler("foo1"); //current error handler: foo1 
set_error_handler("foo2"); //current error handler: foo2 
set_error_handler("foo3"); //current error handler: foo3 

$arr = []; 
var_dump($arr["a"]); 
var_dump($arr["b"]); 
var_dump($arr["c"]); 

顯示:

NULL

NULL

NULL

+0

如果您向foo3添加了'set_error_handler'。像'function foo3(){echo「」; set_error_handler(function(){echo'XXX';}); restore_error_handler();}'你會得到'3 2'的輸出。這和我問題中的問題是一樣的。 - ( – apeipo