PHP:变量赋值的奇怪行为

时间:2015-02-02 05:57:56

标签: php variables

我声明var $t并为其指定值0.然后我将$t重新分配给test的新值。然后看来$t同时是0test。这是代码:

$t = 0;
$t = "test";

if($t == 0 && $t == "test"){
    echo "unexpected";
}else{
    echo "expected";
}

输出结果为:

"unexpected"

有人可以解释一下这里发生了什么吗? $t实际上是两个不同的值(0test),还是我错过了什么?

4 个答案:

答案 0 :(得分:4)

由于PHP的类型杂耍,导致这种“奇怪”行为。由于您使用松散比较==来比较整数0,因此字符串test将转换为整数,从而导致转换为0。请参阅Loose comparison ==表。在字符串php的行中,您会看到它等于整数0,它适用于所有字符串。
您应该使用严格(类型)比较运算符,即===

答案 1 :(得分:0)

你没有附加或连接,所以它不应该。请改为使用相同的比较运算符。

if($t === 0 && $t === "test"){
   ....
}

答案 2 :(得分:0)

PHP手册状态:

  

该值由>字符串的初始部分给出。如果字符串以有效的数字>数据开头,则这将是使用的值。否则,>值将为0(零)。有效数字数据是>可选符号,后跟一个或多个数字>(可选地包含小数点),>后跟可选指数。 >指数是' e'或者' E'后跟一个或多个数字。

http://il.php.net/manual/en/language.types.string.php#language.types.string.conversion

所以$t == 0是真的。您必须使用严格比较===

答案 3 :(得分:0)

嘿伙计使用“===”运算符进行比较。

在php中我们可以为一个简单变量赋值,它包含数字,浮点数,字符,字符串等。

因此,请始终使用“===”运算符进行唯一或相同的值匹配。