PHP字符串比较没有引号

时间:2010-05-04 18:16:54

标签: php string

根据我对PHP的了解,以下语法为合法:

if ($s == Yes)

它应该写成:

if ($s == 'Yes')

但是,第一个例子工作正常。谁知道为什么?

6 个答案:

答案 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)使用身份运算符“===”