エラーの処理は、アプリケーションの最も重要な側面の 1 つです。ユーザーはそれが機能することを期待していますが、エラーが発生すると、アプリケーションが優れていても、アプリケーションに対する信頼を失う可能性があります。私はそれを難しい方法で学びました。
次のようなクラスを使用します。
class ErrorHandler
{
public static function registerHandlers()
{
$inst = new ErrorHandler;
set_error_handler(array(&$inst, 'errorHandler'), E_ALL);
set_exception_handler(array(&$inst, 'exceptionHandler'));
register_shutdown_function(array(&$inst, 'shutdownHandler'));
}
public function shutdownHandler()
{
if (($error = error_get_last()))
{
$this->_clearOutputBuffers();
// Handle error
}
}
public function errorHandler($errno, $errstr, $errfile, $errline, $errcontext)
{
$this->_clearOutputBuffers();
// Handle error
}
public function exceptionHandler(Exception $exception)
{
$this->_clearOutputBuffers();
// Handle error
}
private function _getErrorCode($sMessage, $sFile, $nLine, $nCode)
{
$errorCode = sprintf("%u", crc32($sMessage.$sFile.$nLine.$nCode));
}
private function _clearOutputBuffers()
{
if (count(ob_list_handlers()) > 0)
{
ob_clean();
}
}
}
このクラスは、ほとんどのエラーをキャッチすることができ、デバッグ目的でも驚くほどうまく機能します。エラーが検出されるたびに、後で参照できるようにすべての情報をファイルに書き込みます。さらに、開発環境と本番環境を分離し、個別のエラー画面を用意しています。
開発環境では、ファイルの抽出、スタック トレース、および変数を表示するエラー画面を使用します。
本番環境では、_getErrorCode から返されたエラー番号を含むエラー画面が表示されます。顧客がエラーについて私たちに連絡したい場合、彼がしなければならないことは私たちに番号を伝えるだけで、すぐにそれを調べてすべてのデータを目の前に置くことができます.
開発エラー画面のスクリーンショットを添付しました。
