我正在声明一个变量$t
并为其分配值 0。然后,我重新分配$t
新值 test
。然后看来$t
既0
又test
。代码如下:
$t = 0;
$t = "test";
if($t == 0 && $t == "test"){
echo "unexpected";
}else{
echo "expected";
}
输出为:
"unexpected"
有人可以解释一下这里发生了什么吗?$t
真的同时有两个不同的值(0
和test
)还是我错过了什么?
这种"奇怪"的行为是由于 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 中,我们可以将任何值分配给一个简单的变量,它包含数字、浮点数、字符、字符串等。
因此,请始终使用"==="运算符进行唯一或相同的值匹配。