typ*_*ror 3 php exception-handling
我试图弄清楚在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
}
}
Run Code Online (Sandbox Code Playgroud)
__ loadConfigError函数只是将__error错误字符串设置为:
private static function __loadConfigError($errno, $errstr, $errfile, $errline)
{
self::$__error = $errstr;
}
Run Code Online (Sandbox Code Playgroud)
谢谢!
我通常安装一个全局错误处理程序来将错误转换为异常:
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');
Run Code Online (Sandbox Code Playgroud)
对于极少数情况,我实际上想要收集一堆警告,我暂时关闭上面的处理程序.它在课堂上很好地打包了:
/**
* 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;
}
}
Run Code Online (Sandbox Code Playgroud)