Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
触发PHP7的未定义类常量:注意_Php - Fatal编程技术网

触发PHP7的未定义类常量:注意

触发PHP7的未定义类常量:注意,php,Php,我一直在重命名代码中的一些常量,当发布到生产环境时,我经常在apache日志中看到以下消息: [Sun Feb 16 19:56:29.437393 2020] [php7:notice] [pid 15948] [client 10.0.1.10:24984] Undefined class constant 'SUBMIT_STA_', referer: https://xxxx.yyyy.com/runtest/QuestionDisplayer 之后没有,之前没有。有很多事情我不明白:

我一直在重命名代码中的一些常量,当发布到生产环境时,我经常在apache日志中看到以下消息:

[Sun Feb 16 19:56:29.437393 2020] [php7:notice] [pid 15948] [client 10.0.1.10:24984] Undefined class constant 'SUBMIT_STA_', referer: https://xxxx.yyyy.com/runtest/QuestionDisplayer
之后没有,之前没有。有很多事情我不明白:

  • 未定义的类常量如何触发通知而不是致命错误
  • 为什么我不能得到更多关于错误在代码中出现的位置(如脚本和行号)以及其他错误的信息? 显然,当我查看我的代码时,我没有找到任何SUBMIT_STA_的实例,我找到了一些SUBMIT_STA_XX或SUBMIT_STA_YY,但没有任何SUBMIT_STA,后面没有任何内容
如果常量不存在,它会将常量名称视为字符串

通常情况下,您会编写一个字符串并忘记引号,因此对于PHP,这是一个常量,而不是字符串,但由于没有具有该名称的常量,因此它会将其转换为字符串,并在代码执行时进行修改


因此,您希望查看代码并找到缺少引号的字符串
SUBMIT\u STA
(或者
$
符号,如果它应该是一个变量)

好的,很抱歉我解决了它。我终于找到了使用这个不可抗拒常数的地方。它触发此异常消息的原因是因为它位于try/catch(Throwable$e)处理程序中,在这种情况下,屏幕上不会显示错误,Apache会记录一条[php7:notice]消息。我已经能够重现这种行为。

恐怕不是这样。您描述的内容将触发一条类似警告的消息:使用未定义的常量Z-假定为“Z”(这将在未来版本的PHP中引发错误),并且将有完整的调用堆栈、触发的行号等。。。这里不是这样。@thesailorbreton您是在开发环境中还是在相同的生产环境中遇到这个错误的?当配置为suchI在登录Dev时出现相同错误时,生产中的登录可能会减少,我已经理解了原因。当错误在try/catch(Throwable$e)处理程序中时,就会发生这种情况。屏幕上不会触发任何错误,日志中只显示一条通知。请注意,由于7.2使用了不存在的常量触发警告,因此它会在该版本之前触发通知。谢谢,我使用的是7.3.13,但是警告看起来像:“使用未定义的常量Z-假定为'Z',然后将显示错误行和调用堆栈