2017-07-19 89 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