【问题标题】:PHP 7.0.20: Exception has Code 0PHP 7.0.20:异常代码为 0
【发布时间】:2018-02-23 20:40:26
【问题描述】:

我得到一个错误代码为 0 的异常,但我不知道为什么?异常的文本/消息是“Call to a member function getId() on null”但属性“code”为0。为什么它是0而不是实数?所有其他异常都有正确的错误代码。

这是我的 php.ini 中的错误还是配置错误?

有人有想法吗?

【问题讨论】:

  • 代码的哪一部分出现异常?还是功能?
  • 在一个类中有那个错误,在我自己的异常处理程序中,我想处理我的应用程序中抛出的所有异常。在处理程序中,我使用 $exception->getCode() 和 $exception->getMessage()
  • Call to member function foo on null 是一个致命错误。见:stackoverflow.com/questions/277224/…
  • 啊,所以我没有机会致命错误有代码?或者我如何检查它是否是致命错误?我在我的致命处理程序中使用了函数“error_get_last()”,但这始终为空,但在我的旧 php 版本 5.6 中它可以正常工作:)
  • 您可以在使用前检查您尝试使用的对象是否为空。如果是,则可以抛出异常。

标签: php exception php-7


【解决方案1】:

异常并不总是有代码。如果未明确定义,则错误代码默认为0。请参阅 http://www.php.net/manual/en/exception.construct.php - 异常将默认为 "" 的消息、0 的代码和 NULL 的先前异常。

try {
    throw new Exception('Hello!');
} catch(Exception $e) {
    echo $e->getCode(); // prints 0
}

与 PHP 错误之类的事情相同:

try {
    $foo = new stdClass;
    $foo->fooBar();
} catch(Error $e) {
    echo $e->getCode(); // prints 0 too
    echo $e->getMessage(); // prints "Call to a member function fooBar() on null"
}

【讨论】:

  • 好的,但在我的情况下它是一个php异常,所以我希望我得到一个errorCode或一个像“E_ERROR”这样的ExceptionType。但什么都没有:)
  • @user3388366 PHP 的内置 Error 类具有相同的签名。 php.net/manual/en/class.error.php 致命错误的错误代码似乎是 0
  • 啊,所以我没有机会致命错误有代码?或者我如何检查它是否是致命错误?我在我的致命处理程序中使用了函数“error_get_last()”,但这始终为空,但在我的旧 php 版本 5.6 中它可以正常工作:)
  • 不错。我没有意识到这是一个可恢复的错误。
  • 是的,这个是可以恢复的。我说错了 - 你无法捕捉到一个致命的错误,但这个不是致命的。在我的答案中编辑了一个示例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-03
  • 1970-01-01
相关资源
最近更新 更多