为什么未定义的常量值为true?

rin*_*ogo 19 php constants

愚蠢的问题 - 我很惊讶这个人咬了我.为什么PHP中的未定义常量值为true?

测试用例:

<?php
    if(WHATEVER_THIS_ISNT_DEFINED)
        echo 'Huh?';
?>
Run Code Online (Sandbox Code Playgroud)

上面的例子打印'嗯?'

非常感谢你的帮助!:)

kap*_*apa 26

尝试 defined('WHATEVER_THIS_ISNT_DEFINED')

当PHP遇到未定义的常量时,它会抛出一个E_NOTICE,并使用您尝试用作字符串的常量名称.这就是你的代码段打印的原因Huh!,因为非空字符串(不是"0")会评估true.

从手册:

如果使用未定义的常量,PHP假定您指的是常量本身的名称,就像您将其称为字符串一样(CONSTANT vs"CONSTANT").发生这种情况时,将发出级别E_NOTICE的错误.

如果将错误报告级别设置为报告E_NOTICEs,这在开发过程中是一种很好的做法,您还会看到抛出的通知.


lon*_*day 7

从手册:

如果使用未定义的常量,PHP假定您指的是常量本身的名称,就像您将其称为字符串一样(CONSTANT vs"CONSTANT").

基本上,如果WHATEVER_THIS_ISNT_DEFINED没有定义,PHP会将其解释为"WHATEVER_THIS_ISNT_DEFINED".非空字符串求值true,因此表达式将始终通过(除非WHATEVER_THIS_ISNT_DEFINED 定义并设置为falsey值.)

坦率地说,这是一种愚蠢的行为.我认为,它实现了允许$foo[bar]程序员应该使用的工作$foo['bar'].像这样的不合逻辑的行为让人们认为PHP不是真正的编程语言.

测试是否定义常量的方法是defined.