3

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

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

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

4

3 回答 3

2

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

$constant = get_class($this) . '::' . $name;
$value = defined($constant) ? constant($constant) : null;
于 2012-07-30T21:48:32.170 回答
0

只需确保首先定义常量,然后抛出异常(或继续您遵循的任何流程)。

于 2012-07-30T21:51:17.763 回答
0

PHP 8 也会发生此错误。
请参阅向后不兼容的更改

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

  • 试图访问未定义的非限定常量。以前,不合格的常量访问会导致警告并被解释为字符串。
于 2021-08-23T15:20:03.960 回答