据我所知,以下 PHP 语法不合法:
应该改为以下方式编写:
然而,第一个示例可以正常工作。有人知道原因吗?
if ($s == Yes)
应该改为以下方式编写:
if ($s == 'Yes')
然而,第一个示例可以正常工作。有人知道原因吗?
一般情况下,它会被解释为一个常量,但如果PHP找不到该名称的常量,则假定其为字符串字面量,尽管没有引号。这将生成一个E_NOTICE消息(根据您的错误报告级别可能不可见);类似于:
注意:在script.php的第3行使用未定义的常量Yes-假定为“Yes”
基本上,PHP只是过于宽容。
你需要同时开启 error_reporting 显示通知和 display_errors。
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', '1');
if ($s == Yes) {
// foo
}
error_reporting(E_ALL);
if ($s == Yes) {}
这是一个遗留问题,来自于 PHP 刚开始只是一个“漂亮的主页”表单解释器的时代,而现在已经被强烈反对。
当常量Yes未被定义时,PHP在内部将Yes转换为'Yes'。
顺便说一下.. 如果你想比较$s的值是否为字符串"Yes",那么你必须
a) 使用strcmp或 b) 使用身份运算符"==="