如果声明问题

时间:2010-02-24 11:50:57

标签: php

我有一个名为root的变量。此变量的值为0

$root = 0;

if($root == "readmore"){

            $root = 1701;
        }

某种奇怪的原因,如果$ root为0,它仍然会进入上面的if语句?我不知道它可能是什么

3 个答案:

答案 0 :(得分:3)

这是因为,通过类型杂耍,0被视为等于"readmore"。您要求PHP将字符串与整数进行比较,并将任何不包含数字的字符串解释为0

如果您使用if ($root === "readmore") ...,PHP将检查类型以及变量的值。

答案 1 :(得分:3)

基本上,你正在进行这种比较:

if (0 == 'readmore') {
  // ...
}

这意味着'readmore'将被转换为整数; 'readmore',转换为整数,为0。

请参阅手册中的Type Juggling,以及String conversion to numbers,其中包含(引用)

  

如果字符串以有效开头   数值数据,这将是值   用过的。否则,该值将为0   (零)。


您可能希望使用===运算符,这将阻止这种转换:

if($root === "readmore") {
  // You will not enter here, if $root is 0
}

请参阅Comparison Operators

答案 2 :(得分:2)

尝试

$root = 0;

if($root === "readmore"){

        $root = 1701;
    }

也要检查类型。