根据我对PHP的了解,以下语法为不合法:
if ($s == Yes)
它应该写成:
if ($s == 'Yes')
但是,第一个例子工作正常。谁知道为什么?
答案 0 :(得分:13)
通常,它会被解释为常量,但如果PHP无法通过该名称找到常量,那么尽管缺少引号,它仍假定它是字符串文字。这将生成E_NOTICE消息(可能不可见,具体取决于您的错误报告级别);类似的东西:
注意:使用未定义的常量是 - 在第3行的script.php中假定为“是”
基本上,PHP过于宽松。
答案 1 :(得分:8)
简而言之,PHP就好像引号一样。
如果PHP无法将某些内容识别为保留令牌,则会将其视为字符串文字。
错误日志会显示有关此内容的警告。
答案 2 :(得分:1)
第一个不是字符串。
并且它不能正常工作:
error_reporting(E_ALL);
if ($s == Yes) {}
这是一个传统,当时PHP只是一个“漂亮的主页”形式的翻译,现在强烈劝阻。
答案 3 :(得分:1)
您需要同时使用error_reporting显示通知,并设置display_errors。
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', '1');
if ($s == Yes) {
// foo
}
答案 4 :(得分:0)
在PHP中,Yes将被视为常量。如果常量未定义,则假定您的字符串为“是”。如果您打开了它们,它应该会生成通知。
答案 5 :(得分:0)
当发现不定义常量是时,PHP会在内部将“是”转换为“是”。
顺便说一下..如果你想要的是比较如果$ s的值为“是”,则a是一个字符串,那么你必须
a)使用strcmp或 b)使用身份运算符“===”