Php,有没有办法把所有的通知/警告都变成一个例外?

php
2022-08-30 18:30:26

我已经设置了我的错误处理程序:

set_error_handler (function($errno, $errstr, $errfile,  $errline, array $errcontext) {
  $s = date('Ymd_His');
  switch ($errno)
  {
    case E_USER_ERROR:
      $s.= '_E_';
      break;
    case E_USER_WARNING:
      $s.= '_W_';
      break;
    case E_USER_NOTICE:
      $s.= '_N_';
      break;
    default:
      $s.= '_U_';
      break;
    }
    file_put_contents (APP_PATH_CACHE.'/log'.$s.'_'.rand(1,99999).'.html', print_r(get_defined_vars(), true));
}, E_ALL);

但它能变成一个例外吗?这样我就能看到流程。


答案 1

是的。这正是创建ErrorException的原因。查看 http://php.net/manual/en/class.errorexception.php

function exception_error_handler($severity, $message, $file, $line) {
    if (!(error_reporting() & $severity)) {
        // This error code is not included in error_reporting
        return;
    }
    throw new ErrorException($message, 0, $severity, $file, $line);
}
set_error_handler("exception_error_handler");

答案 2

是的,它可以简单地完成。最好的方法是创建自己的类,该类从 \Exception 扩展而来,并在此新类的 error_handler() throw 对象中扩展。

您也可以在以下情况下以简单的方式执行此操作

file_put_contents (APP_PATH_CACHE.'/log'.$s.'_'.rand(1,99999).'.html', print_r(get_defined_vars(), true));

throw new Exception($errst, $errno);其中第一个参数是消息,第二个是错误号


推荐