ヌシが釣れてましたw
私は大したことできませんがそれなりに古株?なので、「かくあるべき」みたいな形があるのは理解しているつもりなんですが...
具体的にどうこういえ...ないんですよね(汗)。
考えた人に出てきてもらえて、ほっとしているところですw
で、なにも考えないのもアレなので、set_error_handlerを使って考えてみました。
SingletonのErrorHandlerにエラーを放り込んでおいて、LC_Pageで表示する... みたいなサンプル?のつもりです(汗)。
<?php
class ErrorHandler {
var $list = array();
function &getInstance() {
static $eh;
if($eh == null) {
$eh = new ErrorHandler();
}
return $eh;
}
function set($errno, $errstr, $errfile, $errline)
{
switch($errno) {
case E_USER_ERROR :
$this->list[] = "User error: [$errno] $errstr in $errfile on line $errline";
break;
default :
echo "Other error: [$errno] $errstr in $errfile on line $errline <br />\n";
}
}
function get() {
return array_pop($this->list);
}
function isError() {
return !empty($this->list);
}
}
/* ================================================= */
class Helper_Mail {
function sendOrder() {
$obj = new Send_Mail_Ex;
$obj->sendMail();
$var = $var; // error line 39
}
}
class Send_Mail_Ex extends Send_Mail{
function Send_Mail_Ex() {
parent::Send_Mail();
}
}
class Send_Mail {
function Send_Mail() {}
function sendMail() {
$err = true;
if($err) trigger_error('class Send_Mail の method sendMail() で error', E_USER_ERROR); // error line 53
}
}
/* ================================================= */
$objErr1 =& ErrorHandler::getInstance();
if(version_compare(phpversion(), '5.0.0', '>=')) {
set_error_handler(array($objErr1, 'set'), E_ALL);
} else {
set_error_handler(array($objErr1, 'set'));
}
trigger_error("とりあえずエラー", E_USER_ERROR); // error line 66
$c = new Helper_Mail;
$c->sendOrder();
$buf = 1 / 0; // error line 71
$objErr2 =& ErrorHandler::getInstance();
print "<pre>";
print_r($objErr2->list);
print "</pre>\n";
$objErr3 =& ErrorHandler::getInstance();
while(1) {
if(!$objErr3->isError()) {
echo 'エラーリストは空です';
break;
}
echo $objErr3->get() . "<br />\n";
}
?>