php-对我的框架实施错误处理
作者:互联网
我将开始在我的框架中实施错误处理,并寻求有关如何构建它的一些建议.
首先让我解释一下我的框架是如何构建的:
我将框架启动与应用程序启动分开,因此应由专用于该类的类专门处理应用程序启动内引起的任何错误.
我的想法是让一个名为Core_Error_exception的类将错误报告设置为E_ALL,因为我的框架将严格限制PHP 5.3的错误,然后作为我的应用程序负载,我将在该类中运行关闭函数以恢复所有默认值值已更改.
我想做的是捕获所有E _ * _ NOTICE而不是E _ * _ ERROR的错误,然后在应用程序启动之前,我告诉类停止捕获错误,因为Application_Error_Exception将注意错误.
因此,我将需要一种跟踪所有错误(包括异常和触发器)的方法,然后在应用程序初始化之前显示框架调试页面.
我正在寻找的课程是这样的:
class Core_Error_Exception
{
var $previus_error_level,$captured_contents;
private $stack_trace = array();
public function Core_Error_Exception()
{
$this->previus_error_level = error_reporting(-1);
set_error_handler(array($this,'_collect_error'));
set_exception_handler(array($this,'_collect_error'));
ob_start(array($this,'_capture'));
}
public function _collect_error($errno, $errstr, $errfile, $errline, $context)
{
$this->stack_trace[] = array(
array('name' => 'Error ID:', 'value' => $errno),
array('name' => 'Error String:','value' => $errstr),
array('name' => 'Error File:', 'value' => $errfile),
array('name' => 'Error Line:', 'value' => $errline),
array('name' => 'Context PRE:', 'value' => $context)
);
var_dump($this->stack_trace);
}
/*
* _capture is used to capture pre_bufferd content.
*/
public function _capture($content,$bitfeild)
{
if($bitfeild & PHP_OUTPUT_HANDLER_START)
{
$this->captured_contents = $content;
}
if($bitfeild & PHP_OUTPUT_HANDLER_CONT)
{
$this->captured_contents .= $content;
}
if($bitfeild & PHP_OUTPUT_HANDLER_END)
{
$this->captured_contents .= $content;
}
return false;
}
}
因此,我想做的是能够以防跌倒的方式构造此类,以便将可能已触发的任何通知错误放入数组中,如果调用了E_ERROR通知,则此操作会自动运行在那一刻下来,以防止引起更多的错误.
我将使用一个小的html模板处理程序,在其中可以传递该上下文错误集,因此请注意错误和单个E _ * _ ERROR(如果适用).
与过去一样,构建此类的最佳方法是什么?我在执行错误跟踪/报告时遇到了一些困难.
更新:当前课程
如果触发了错误,例如trigger_error(‘test’,XXX);我希望能够跟踪所有错误,直到应用程序启动或触发了E_USER_ERROR.
有时我很难完全掌握PHP的错误系统,等等,有时我对如何构建它感到困惑,以至于它不易摔倒.
解决方法:
我不太确定自己在做什么,但是最直接的方法是按照以下方式使用嵌套的try块:
in Class Application:
function run() {
try {
--do stuff
} catch(AppException $e) {
-- handle application-level exception
}
-- all other exceptions fall through
in Class Core:
try {
$core->init();
$application->run(); <-- calls the above function
$core->done();
} catch(Exception $e) {
--last chance exception handler
--process exceptions the Application was unable to handle on its own
}
为了能够以这种方式捕获php内置错误或trigger_error事件,还应该始终安装errors-to-exceptions handler.
标签:error-reporting,php 来源: https://codeday.me/bug/20191209/2096466.html