php restore_error_handler无法按预期工作

时间:2017-07-19 12:29:11

标签: php error-handling

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"]);

输出:

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

phpversion:7.0.10

作为上面的输出,似乎处理程序中的restore_error_handler不像往常一样工作。

我希望error_handler转到2,但error_handler会回到1.

1 个答案:

答案 0 :(得分: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"]);

显示:

  

3

     

NULL

     

2

     

NULL

     

1

     

NULL