愚蠢的问题 - 我很惊讶这个人咬了我.为什么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,这在开发过程中是一种很好的做法,您还会看到抛出的通知.
从手册:
如果使用未定义的常量,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.
| 归档时间: |
|
| 查看次数: |
2983 次 |
| 最近记录: |