【问题标题】:Is set_exception_handler meant to replace set_error_handler?set_exception_handler 是否打算替换 set_error_handler?
【发布时间】:2012-06-02 19:51:19
【问题描述】:

根据PHP Manual内部 PHP 函数主要使用错误报告,只有现代面向对象的扩展使用异常。但是,错误可以通过 ErrorException 简单地转换为异常

ErrorException 中提供的示例:

<?php
function exception_error_handler($errno, $errstr, $errfile, $errline ) {
    throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
}
set_error_handler("exception_error_handler");

它似乎允许使用异常而不是默认的错误报告。我的问题是,这对我们来说是一种鼓励还是一种选择?

另外,更好的做法是像上面的例子一样单独使用异常,还是同时使用异常(set_exception_handler)和错误报告(set_error_handler)?

【问题讨论】:

    标签: php


    【解决方案1】:

    不,任何未捕获的异常都会导致致命错误。如果您想优雅地响应未在 catch 块中捕获的异常,则需要将函数设置为默认异常处理程序。 为此,您可以使用 set_exception_handler() 函数,该函数接受一个可调用对象作为其参数。您的脚本将在可调用对象执行后终止。 restore_exception_handler() 函数会将异常处理程序恢复为之前的值。

    【讨论】:

      【解决方案2】:

      简短回答:不。这是两个不同的功能。

      长答案:它不是要替换,而是要利用。 set_exception_handlerDocs 用于异常,set_error_handlerDocs 用于错误。那是两双不同的鞋子。

      参见:

      【讨论】:

      • stackoverflow.com/questions/841500/php-exceptions-vs-errors 中 Kris 的答案/示例似乎也是我的示例。看来他还将错误和异常合并到一个异常处理程序中,因此“替换”了错误报告的经典行为?
      • 是的,这可以通过使用内置的ErrorException 类来实现,请参阅 PHP 手册中的示例。请注意,大部分错误与异常都是主观的。您需要为您的代码/应用程序决定要遵循/混合/使用哪种方法。我回答的重点是,这两个函数是两种工具,两双鞋,但都用于步行(这里的错误和异常处理在同一个域中)。
      • 所以我想使用异常作为处理异常和错误的机制是完全安全的,而不是使用不同的错误处理程序和不同的异常处理程序?
      • 有些错误需要特殊处理,据我所知,这些错误在异常情况下是不可能的,并且是可捕获的致命错误。但是,如果您亲自问我,我通常更喜欢异常驱动编程而不是错误处理,因为您无法绕过异常;)因此代码通常更严格。
      • 太烦人了。我讨厌 php。他们甚至没有提供包含错误和异常的通用抽象。
      猜你喜欢
      • 2016-05-15
      • 2010-12-04
      • 1970-01-01
      • 1970-01-01
      • 2011-11-14
      • 1970-01-01
      • 1970-01-01
      • 2013-05-17
      • 1970-01-01
      相关资源
      最近更新 更多