php - 在 PHP5 中,我应该使用 Exceptions 还是 trigger_error/set_error_handler?

标签 php exception

这两种方法的优缺点是什么。有一种正确的方法(tm)吗?

最佳答案

如果您想为整个应用程序使用异常而不是错误,您可以使用 ErrorException 来实现和自定义错误处理程序(请参阅 ErrorException 页面以获取示例错误处理程序)。这种方法的唯一缺点是非 fatal error 仍然会抛出异常,除非被捕获,否则这些异常总是致命的。基本上,即使是 E_NOTICE 也会停止您的整个应用程序,如果您的 error_reporting设置不会抑制它们。

在我看来,使用 ErrorException 有几个好处:

  1. 使用set_exception_handler,自定义异常处理程序可以让您显示漂亮的消息,即使是错误消息。 .
  2. 它不会以任何方式破坏现有代码... trigger_error和其他错误功能仍将正常工作。
  3. 很难忽略会触发 E_NOTICEE_WARNING 的愚蠢编码错误。
  4. 您可以使用 try/catch 来包装可能产生 PHP 错误(不仅仅是异常)的代码,这是避免使用@ 错误抑制技巧:

    try {
        $foo = $_GET['foo'];
    } catch (ErrorException $e) {
        $foo = NULL;
    }
    
  5. 如果您想在发生任何 Uncaught Error 时向用户显示友好消息,则可以将整个脚本包装在一个 try/catch block 中。 (小心执行此操作,因为只会记录 Uncaught Error 和异常。)

关于php - 在 PHP5 中,我应该使用 Exceptions 还是 trigger_error/set_error_handler?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60607/

相关文章:

php - 在 PHP 中转换日期格式

javascript - 客户端和服务器端编程有什么区别?

android - 使用 EditTextPreference 的子类时出现 InstantiationException

C++ - 捕获所有异常?

java - 循环性能差但顺序执行速度快

php - Laravel 中不需要的重定向

php - 有没有办法在客户端验证 javascript 文件的完整性?

php - Digital Ocean Ubuntu LAMP 服务器 : Laravel cannot access router group

C++ | Q : cygwin exception when executing the executable |

同名的 Java 异常 - 是哪一个?