为什么未定义的常量的计算结果为 true?
愚蠢的问题 - 我很惊讶这个咬了我。为什么 PHP 中未定义的常量的计算结果为 true?
测试用例:
<?php
if(WHATEVER_THIS_ISNT_DEFINED)
echo 'Huh?';
?>
上面的例子打印“嗯?
非常感谢您的帮助!:)
愚蠢的问题 - 我很惊讶这个咬了我。为什么 PHP 中未定义的常量的计算结果为 true?
测试用例:
<?php
if(WHATEVER_THIS_ISNT_DEFINED)
echo 'Huh?';
?>
上面的例子打印“嗯?
非常感谢您的帮助!:)
尝试defined('WHATEVER_THIS_ISNT_DEFINED')
当 PHP 遇到未定义的常量时,它会抛出一个 ,并使用您尝试用作字符串的常量名称。这就是您的代码段打印的原因,因为非空字符串(不是)的计算结果为 。E_NOTICE
Huh!
"0"
true
从手册中:
如果你使用一个未定义的常量,PHP会假设你指的是常量本身的名称,就像你把它称为字符串一样(常量与“常量”)。发生这种情况时,将发出E_NOTICE级错误。
如果将错误报告级别设置为 report s(这在开发过程中是一种很好的做法),您还将看到抛出的通知。E_NOTICE
从手册中:
如果你使用一个未定义的常量,PHP会假设你指的是常量本身的名称,就像你把它称为字符串一样(常量与“常量”)。
基本上,如果未定义,PHP会将其解释为.非空字符串的计算结果为 ,因此表达式将始终传递(除非已定义并设置为 falsey 值)。WHATEVER_THIS_ISNT_DEFINED
"WHATEVER_THIS_ISNT_DEFINED"
true
WHATEVER_THIS_ISNT_DEFINED
坦率地说,这是愚蠢的行为。我相信,它的实现是为了允许程序员应该使用.像这样的不合逻辑的行为使人们认为PHP不是一种真正的编程语言。$foo[bar]
$foo['bar']
测试常量是否定义的方法是使用已定义
。