PHP set_error_handler()函数的使用之二
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP set_error_handler()函数的使用之二相关的知识,希望对你有一定的参考价值。
phpWind的前端控制器AbstractWindFrontController.php中是这样使用的,
/**
* 创建并执行当前应用,单应用访问入口
*/
public function run() {
$this->_app = $this->createApplication($this->_config[‘web-apps‘][$this->_appName],
WindFactory::_getInstance());
set_error_handler(array($this, ‘_errorHandle‘), error_reporting());//调用了当前抽象类中的_errorHandle()方法
set_exception_handler(array($this, ‘_exceptionHandle‘));
if ($this->_config[‘isclosed‘]) {
throw new Exception(‘Sorry, Site has been closed!‘);
}
if ($this->_chain !== null) $this->_chain->getHandler()->handle(‘onCreate‘);
/* @var $router WindRouter */
$router = $this->_app->getFactory()->getInstance(‘router‘);
$router->route($this->_app->getRequest());
if ($this->_chain !== null) $this->_chain->getHandler()->handle(‘onStart‘);
$this->_app->run($router);
if ($this->_chain !== null) $this->_chain->getHandler()->handle(‘onResponse‘);
$this->_app->getResponse()->sendResponse();
$this->_app->getFactory()->executeDestroyMethod();
restore_error_handler();
restore_exception_handler();
}
/**
* 错误处理句柄
*
* @param int $errno
* @param string $errstr
* @param string $errfile
* @param int $errline
*/
public function _errorHandle($errno, $errstr, $errfile, $errline) {
if (0 === error_reporting()) return;
restore_error_handler();
/* @var $error WindError */
$error = $this->_app->getFactory()->getInstance(‘error‘,
array(
$this->_config[‘web-apps‘][$this->_appName][‘error-dir‘],
$this->_config[‘isclosed‘]));
$error->errorHandle($errno, $errstr, $errfile, $errline);
}
最后调用了WindError基类中的errorHandle()方法,用showErrorMessage()将错误抛出,如下:
/**
* 错误处理句柄
*
* @param int $errno
* @param string $errstr
* @param string $errfile
* @param int $errline
*/
public function errorHandle($errno, $errstr, $errfile, $errline) {
$trace = array();
if (Wind::$isDebug) {
$trace = debug_backtrace();
unset($trace[0]["function"], $trace[0]["args"]);
}
$this->showErrorMessage($this->_friendlyErrorType($errno) . ‘: ‘ . $errstr, $errfile,
$errline, $trace, $errno);
}
以上是关于PHP set_error_handler()函数的使用之二的主要内容,如果未能解决你的问题,请参考以下文章