【问题标题】:PHP Fatal Error when using constant()使用常量()时的PHP致命错误
【发布时间】:2012-07-30 21:39:55
【问题描述】:

constant() 的手动条目说,如果未定义常量,则函数应返回 NULL。然而,在下面的代码中,它给出了一个致命错误。

$constant = get_class($this) . '::' . $name;
$value = constant($constant);

如果 $name 有效,则一切正常。但是,如果不是,我会收到一个致命错误“未定义的类常量...”手册说它也应该引发 E_WARNING 错误,但我在日志文件中没有看到这一点。

【问题讨论】:

  • $constant 是一个变量,而不是一个常量。
  • @bfavaretto:所以? read
  • 好吧,现在我意识到我的评论很愚蠢。
  • @Kim Prince:我没有遇到致命错误。请在您的问题中包含一个 SSCCE(简短、独立、正确的示例)以及您的 PHP 版本。
  • @Tim Cooper:我在 php 5.3 上变得致命

标签: php constants


【解决方案1】:

您的 PHP 设置可能设置为将所有错误视为致命错误。如果是这种情况,在尝试检索该常量之前检查它是否存在将是一个修复:

$constant = get_class($this) . '::' . $name;
$value = defined($constant) ? constant($constant) : null;

【讨论】:

  • 不,这可能是版本相关的行为
【解决方案2】:

首先确保常量为defined,然后引发异常(或继续您遵循的任何流程)。

【讨论】:

    【解决方案3】:

    PHP 8 也会发生此错误。
    Backward Incompatible Changes

    许多警告已转换为错误异常:

    • 试图访问未定义的非限定常量。以前,不合格的常量访问会导致警告并被解释为字符串。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 2013-07-07
      • 2013-10-10
      • 2017-03-03
      相关资源
      最近更新 更多