【发布时间】:2011-03-26 10:42:46
【问题描述】:
我最近遇到了一些代码,它们使用自定义错误处理程序将任何 PHP 错误转换为通用应用程序异常。还定义了一个自定义异常处理程序,如果它在特定的错误代码范围内,它将记录异常。示例:
class AppException extends Exception
{
}
function error_handler($errno, $errstr, $errfile, $errline)
{
throw new AppException($errstr, $errno);
}
function exception_handler($exception)
{
$min = ...;
$max = ...;
if ($exception->getCode() >= $min && $exception->getCode() <= $max)
{
// log exception
}
}
set_error_handler('error_handler');
set_exception_handler('exception_handler');
$a[1]; // throws exception
问题是我看到了类似的东西:
try
{
do_something();
}
catch (AppException $exception)
{
}
这意味着实际编程错误和“异常”行为之间没有区别。在进一步挖掘后,我发现部分代码是围绕 PHP 错误代表“异常”行为的想法而设计的,例如:
...
function my_function($param1, $param2)
{
// do something great
}
try
{
my_function('only_one_param');
}
catch (AppException $exception)
{
}
这最终会混淆错误和应用程序界面的设计。
您对以这种方式处理错误有何看法?是否值得将 PHP 的原生错误转化为异常?在上述情况下,围绕这个想法设计代码库时,你会怎么做?
【问题讨论】:
标签: php exception exception-handling interface error-handling