PHP:变量赋值的奇怪行为


PHP: Strange behaviour with variable assignment

我正在声明一个变量$t并为其分配值 0。然后,我重新分配$t新值 test 。然后看来$t0test。代码如下:

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

输出为:

"unexpected"

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

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

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

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

PHP 手册指出:

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

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

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

嘿,

伙计使用"==="运算符进行比较。

在 php 中,我们可以将任何值分配给一个简单的变量,它包含数字、浮点数、字符、字符串等。

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