当前位置:  开发笔记 > 编程语言 > 正文

将错误视为异常.最好的方法?

如何解决《将错误视为异常.最好的方法?》经验,为你挑选了1个好方法。

我试图弄清楚在PHP中处理错误是否有一个好的或更好的方法,而不是我在下面做的.如果电话有问题,我想抛出异常parse_ini_file.这有效,但是有更优雅的方法来处理错误吗?

public static function loadConfig($file, $type)
{
    if (!file_exists($file))
    {
        require_once 'Asra/Core/Exception.php';
        throw new Asra_Core_Exception("{$type} file was not present at specified location: {$file}");
    }

    // -- clear the error
    self::$__error = null;
    // -- set the error handler function temporarily
    set_error_handler(array('Asra_Core_Loader', '__loadConfigError'));
    // -- do the parse
    $parse = parse_ini_file($file, true);
    // -- restore handler
    restore_error_handler();

    if (!is_array($parse) || is_null($parse) || !is_null(self::$__error))
    {
        require_once 'Asra/Core/Exception.php';
        throw new Asra_Core_Exception("{$type} file at {$file} appears to be    
    }
}

__ loadConfigError函数只是将__error错误字符串设置为:

private static function __loadConfigError($errno, $errstr, $errfile, $errline)
{ 
   self::$__error = $errstr;
}

谢谢!



1> troelskn..:

我通常安装一个全局错误处理程序来将错误转换为异常:

function exceptions_error_handler($severity, $message, $filename, $lineno) {
  if (error_reporting() == 0) {
    return;
  }
  if (error_reporting() & $severity) {
    throw new ErrorException($message, 0, $severity, $filename, $lineno);
  }
}
set_error_handler('exceptions_error_handler');

对于极少数情况,我实际上想要收集一堆警告,我暂时关闭上面的处理程序.它在课堂上很好地打包了:

/**
 * Executes a callback and logs any errors.
 */
class errorhandler_LoggingCaller {
  protected $errors = array();
  function call($callback, $arguments = array()) {
    set_error_handler(array($this, "onError"));
    $orig_error_reporting = error_reporting(E_ALL);
    try {
      $result = call_user_func_array($callback, $arguments);
    } catch (Exception $ex) {
      restore_error_handler();
      error_reporting($orig_error_reporting);
      throw $ex;
    }
    restore_error_handler();
    error_reporting($orig_error_reporting);
    return $result;
  }
  function onError($severity, $message, $file = null, $line = null) {
    $this->errors[] = $message;
  }
  function getErrors() {
    return $this->errors;
  }
  function hasErrors() {
    return count($this->errors) > 0;
  }
}

推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有