<?php
// your code goes here
if (0 == "asdf")
echo "same";
else
echo "not same";
你好,为什么这段代码打印“相同”,而不是“不相同”?我对这个奇怪的结果有点困惑。这是一个错误吗?
执行结果:见http://ideone.com/wfWRlq
答案 0 :(得分:6)
不,这不是字符串刚刚转换为int的错误。它将其从左向右转换为非数值。因此,由于在开始时存在非数字值,因此它将转换为0。
有关String to int的更多信息,请参阅手册:http://php.net/manual/de/language.types.string.php#language.types.string.conversion
从那里引用:
该值由字符串的初始部分给出。如果字符串以有效数字数据开头,则这将是使用的值。 否则,该值将为0(零)。
举个例子来说明:
echo "5xyz" + 5; // 5 + 5 -> 10
//^
echo "xyz5" + 5; // 0 + 5 -> 5
//^
echo "x5z" + 5; // 0 + 5 -> 5
//^
答案 1 :(得分:1)
您应该使用===
。因为那会转换价值类型。
答案 2 :(得分:1)
这是PHP中比较的非直观行为之一。松散比较有==
运算符,只检查给定变量的值和===
运算符进行严格比较,还检查变量类型。 PHP手册有dedicated page with comparisons tables。