在 PHP5 中,我应该使用异常还是trigger_error/set_error_handler?[已关闭]
无论哪种方式的利弊是什么。有没有一种正确的方法(tm)?
无论哪种方式的利弊是什么。有没有一种正确的方法(tm)?
如果要对整个应用程序使用异常而不是错误,可以使用 ErrorException 和自定义错误处理程序执行此操作(有关示例错误处理程序,请参阅 ErrorException 页)。此方法的唯一缺点是,非致命错误仍将引发异常,除非捕获,否则这些异常始终是致命的。基本上,如果您的error_reporting设置不抑制它们,即使 an 也会停止整个应用程序。E_NOTICE
在我看来,使用ErrorException有几个好处:
E_NOTICE
E_WARNING
您可以使用 / 来包装可能生成 PHP 错误(不仅仅是异常)的代码,这是避免使用错误抑制 hack 的好方法:try
catch
@
try {
$foo = $_GET['foo'];
} catch (ErrorException $e) {
$foo = NULL;
}
如果您想在发生任何未捕获的错误时向用户显示友好消息,则可以将整个脚本包装在单个/块中。(请小心执行此操作,因为仅记录未捕获的错误和异常。try
catch
你应该在“特殊情况”中使用异常,也就是说,当你调用一个方法doFoo()时,你应该期望它执行,如果由于某种原因doFoo无法完成它的工作,那么它应该引发一个异常。
许多旧的php代码会在发生故障时采用返回false或null的方法,但这会使事情难以调试,异常使这种调试变得更加容易。
例如,假设你有一个名为getDogFood()的方法,它返回一个DogFood对象数组,如果你调用这个方法,当出现问题时它返回null,你的调用代码如何能够判断是否返回null,因为有一个错误或只是没有狗粮可用?
关于处理使用php内置错误日志记录的旧代码库,您可以使用set_error_handler()函数覆盖错误日志记录,然后可以使用该函数重新抛出通用异常。
现在,您已经将所有代码都抛出了详细的异常,您可以自由决定如何处理它们,在代码的某些部分中,您可能希望捕获它们并尝试其他方法,或者您可以使用自己的日志记录函数记录它们,这些函数可能会记录到数据库,文件,电子邮件中 - 无论您喜欢哪种。简而言之 - 例外更灵活 。