我无法理解为什么声明在两次都成真。?
$hello="foo";
if($hello<=6){
echo "yes\n";
}
if ($hello>=0) {
echo "ohh yess!";
}
输出
yes
ohh yess!
我知道这是整数和字符串之间的非法比较,但为什么它毕竟是真的。
答案 0 :(得分:8)
这是因为type juggling in PHP。所以"foo"
的计算结果为零,因为它被转换为整数。如果您使用相同的运算符(===
)类型转换未执行,那么"foo"
将被视为文字字符串,然后您的语句将评估为false。
答案 1 :(得分:7)
正如PHP manual所说:
该值由字符串的初始部分给出。如果字符串以有效数字数据开头,则这将是使用的值。 否则,该值将为0(零)。
在这种情况下,字符串foo
在比较完成时评估为零,因此if
条件将评估为TRUE
。
实际上,你将会这样做:
if(0 <= 6) {
echo "yes\n";
}
if (0 >= 0) {
echo "ohh yess!";
}
如果您想确保也考虑变量类型,请使用===
运算符。
答案 2 :(得分:-1)
目前它正在检查if $hello exist
,在这两种情况下都是如此。可能你想要这个
$hello="foo";
if(strlen($hello)<=6){
echo "yes\n";
}
if (strlen($hello)>=0) {
echo "ohh yess!";
}