原创文章,转载请注明: 转载自庆亮的博客-webgame架构
本文链接地址: Zend Framework代码实例 — 手工扑捉PHP内部错误
很明显本文的标题不够准确、不能很好体现本文所要表达的意思, 如果你想明白我想说什么, 那么你只好看下去. 呵呵.
今天看ZF源码时看到类Zend_Config_Ini中一段比较有意思的代码:
set_error_handler(array($this, ‘_loadFileErrorHandler’));
$iniArray = parse_ini_file($filename, true); // Warnings and errors are suppressed
restore_error_handler();
// Check if there was a error while loading file
if ($this->_loadFileErrorStr !== null) {
/**
* @see Zend_Config_Exception
*/
require_once ‘Zend/Config/Exception.php’;
throw new Zend_Config_Exception($this->_loadFileErrorStr);
}
看了这段代码我的第一反应时为什么要这样处理呢?立刻转到错误处理方法看看
protected function _loadFileErrorHandler($errno, $errstr, $errfile, $errline)
{
if ($this->_loadFileErrorStr === null) {
$this->_loadFileErrorStr = $errstr;
} else {
$this->_loadFileErrorStr .= (PHP_EOL . $errstr);
}
}
很简单,错误处理方法只是在出错时将类的$_loadFileErrorStr 属性设置为出错字符串.
翻看PHP手册, 从parse_ini_file函数的定义我们可以看出该函数在出现错误时(例如文件不存在,ini文件格式不正确等等)直接输出错误信息, 而不是通过返回值来表达出错信息, 这样我们在使用该函数时就无法很好的控制——在出错时合适的终止程序并给出错误提示或者不可避免的将可能不可理解的错误信息呈现给用户, 为了能够比较简单的手工处理出错信息, 这里采用了这个修改出错处理函数的方法, 由于这个出错函数比较有局限性, 所以之后又立即恢复了出错处理函数.
0 Comments.