constant() 的手动条目说,如果未定义常量,则函数应返回 NULL。然而,在下面的代码中,它给出了一个致命错误。
$constant = get_class($this) . '::' . $name;
$value = constant($constant);
如果 $name 有效,则一切正常。但是,如果不是,我会收到一个致命错误“未定义的类常量......”手册说它也应该引发 E_WARNING 错误,但我在日志文件中没有看到这一点。
您的 PHP 设置可能被设置为将所有错误视为致命错误。如果是这种情况,在尝试检索常量之前检查常量是否存在将是一个修复:
$constant = get_class($this) . '::' . $name;
$value = defined($constant) ? constant($constant) : null;
只需确保首先定义常量,然后抛出异常(或继续您遵循的任何流程)。
PHP 8 也会发生此错误。
请参阅向后不兼容的更改
许多警告已转换为错误异常:
- 试图访问未定义的非限定常量。以前,不合格的常量访问会导致警告并被解释为字符串。