Php 为什么Zend\Log(ZF2.2)正在中断错误处理程序

Php 为什么Zend\Log(ZF2.2)正在中断错误处理程序,php,zend-framework2,Php,Zend Framework2,为什么Zend\Log会破坏follow错误处理功能 function error_handler($errno, $errstr, $errfile, $errline, $errcontext = null) { global $Logger; $Logger->log(6 , "Error '$errstr' received.<br>"); return true; } $Logger = new \Zend\Lo

为什么Zend\Log会破坏follow错误处理功能

function error_handler($errno, $errstr, $errfile, $errline, $errcontext = null)
{
    global $Logger;
    
    $Logger->log(6 , "Error '$errstr' received.<br>");
    return true;
}

$Logger = new \Zend\Log\Logger;
$Logger->addWriter(new \Zend\Log\Writer\Null);

set_error_handler('error_handler');

trigger_error('a', E_USER_ERROR);
trigger_error('b', E_USER_ERROR);
trigger_error('c', E_USER_ERROR);
trigger_error('d', E_USER_ERROR);

echo 'done.';
函数错误\u处理程序($errno、$errstr、$errfile、$errline、$errcontext=null)
{
全球$记录器;
$Logger->log(6,“收到错误“$errstr”。
”; 返回true; } $Logger=new\Zend\Log\Logger; $Logger->addWriter(新建\Zend\Log\Writer\Null); 设置错误处理程序(“错误处理程序”); 触发错误(“a”,E用户错误); 触发错误(“b”,E用户错误); 触发错误(“c”,E用户错误); 触发错误(“d”,E用户错误); echo“完成”;
如果删除$Logger->log()行,脚本将按预期执行:

完成了

将日志记录行保留在脚本中,并在第二个E_USER_错误时终止

致命错误:第37行Z:\Workspace\xampp\htdocs\tests\error.php中的b

同样,如果将错误级别更改为E_USER_WARNING:

警告:第37行Z:\Workspace\xampp\htdocs\tests\error.php中的b

警告:第38行Z:\Workspace\xampp\htdocs\tests\error.php中的c

警告:第39行的Z:\Workspace\xampp\htdocs\tests\error.php中有d

完成了

函数错误\u处理程序($errno、$errstr、$errfile、$errline、$errcontext=null)
{
全球$记录器;
$Logger->log(6,“收到错误“$errstr”。
”; 设置错误处理程序(“错误处理程序”); 返回true; } $Logger=new\Zend\Log\Logger; $Logger->addWriter(新建\Zend\Log\Writer\Null); 设置错误处理程序(“错误处理程序”); 触发错误(“a”,E用户错误); 触发错误(“b”,E用户错误); 触发错误(“c”,E用户错误); 触发错误(“d”,E用户错误); echo“完成”;

它似乎在过程中释放了错误处理程序。不知道为什么。另外,请记住,E_USER_ERROR与E_ERROR非常相似,用于发出不可恢复的错误。所以,也许这种行为是有道理的。

收获不错,谢谢!我已将其提交给ZF2问题跟踪程序。
function error_handler($errno, $errstr, $errfile, $errline, $errcontext = null)
{
    global $Logger;

    $Logger->log(6 , "Error '$errstr' received.<br>");
    set_error_handler ('error_handler');
    return true;
}

$Logger = new \Zend\Log\Logger;
$Logger->addWriter(new \Zend\Log\Writer\Null);

set_error_handler('error_handler');

trigger_error('a', E_USER_ERROR);
trigger_error('b', E_USER_ERROR);
trigger_error('c', E_USER_ERROR);
trigger_error('d', E_USER_ERROR);

echo 'done.';