フレームワークにエラー処理の実装を開始し、それを構築する方法に関するアドバイスを探しています。
まず、私のフレームワークが現在どのように構築されているかを説明しましょう。
フレームワークの起動をアプリケーションの起動から分離しているため、アプリケーションの起動中に発生したエラーは、専用のクラスによって具体的に処理する必要があります。
私の考えは、私のフレームワークがPHP 5.3のエラーに厳密であるため、 witchというクラスCore_Error_exception
にエラー報告を設定することです。次に、アプリケーションの負荷として、そのクラス内でシャットダウン関数関数を実行して、変更されたすべてのデフォルト値を復元します。 .E_ALL
私がやろうとしているのは、すべてのエラーをキャプチャすることです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通知が呼び出された場合、これにより自動的にshut-より多くのエラーが発生するのを防ぐために、その時点でダウンします。
そのコンテキスト セットのエラーに渡すことができる小さな html テンプレート ハンドラーを使用しますE_*_ERROR
。
過去にエラー追跡/レポートを行うのに苦労したので、このクラスを構築する最良の方法は何ですか.
更新: 現在のクラスで
trigger_error('test',XXX); などのエラーが発生した場合。アプリケーションが起動するまで、または E_USER_ERROR がトリガーされるまで、すべてのエラーを追跡できるようにしたいと考えています。
PHP のエラー システムを完全に把握するのに苦労することもあります。