我试图弄清楚在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; }
谢谢!
我通常安装一个全局错误处理程序来将错误转换为异常:
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; } }