为什么未定义的常量的计算结果为 true?

2022-08-30 20:56:38

愚蠢的问题 - 我很惊讶这个咬了我。为什么 PHP 中未定义的常量的计算结果为 true?

测试用例:

<?php
    if(WHATEVER_THIS_ISNT_DEFINED)
        echo 'Huh?';
?>

上面的例子打印“嗯?

非常感谢您的帮助!:)


答案 1

尝试defined('WHATEVER_THIS_ISNT_DEFINED')

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

从手册中:

如果你使用一个未定义的常量,PHP会假设你指的是常量本身的名称,就像你把它称为字符串一样(常量与“常量”)。发生这种情况时,将发出E_NOTICE级错误。

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


答案 2

从手册中:

如果你使用一个未定义的常量,PHP会假设你指的是常量本身的名称,就像你把它称为字符串一样(常量与“常量”)。

基本上,如果未定义,PHP会将其解释为.非空字符串的计算结果为 ,因此表达式将始终传递(除非定义并设置为 falsey 值)。WHATEVER_THIS_ISNT_DEFINED"WHATEVER_THIS_ISNT_DEFINED"trueWHATEVER_THIS_ISNT_DEFINED

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

测试常量是否定义的方法是使用已定义


推荐