我遇到了一个有趣的问题,带着恶作剧的“if”条件:
$condition1="53==56";
$condition2="53==57";
$condition3="53==58";
$condition=$condition1."||".$condition2."||".$condition3;
if($condition)
{
echo "blah";
}
else
{
echo "foo";
}
为什么if条件通过? 为什么php回应“等等”?如何让php评估“if”语句并打印“foo”?
答案 0 :(得分:8)
这里的问题是你将表达式放在字符串中!
您的$condition1
,$condition2
和$condition3
变量包含字符串,而不是表达式的结果,同样适用于您的$condition
变量看起来像53==56||53==57||53==58
的字符串。当PHP评估字符串时,如果它不为空且不等于true
,则认为它是0
,因此您的脚本将输出blah
。
要解决此问题,您只需要将表达式从字符串中删除即可。它应该是这样的:
$condition1 = 53 == 56; // false
$condition2 = 53 == 57; // false
$condition3 = 53 == 58; // false
$condition = $condition1 || $condition2 || $condition3; // false || false || false = false
if ($condition) {
echo 'blah';
} else {
echo 'foo'; // This will be output
}
答案 1 :(得分:7)
你正在评估字符串为布尔值;它们将永远是真的(字符串""
和"0"
除外。删除程序中的几乎所有引号。
答案 2 :(得分:5)
这些不是条件,它们是字符串。
$condition1=53==56;
$condition2=53==57;
$condition3=53==58;
$condition=$condition1 || $condition2 || $condition3;
if($condition)
{
echo "blah";
}
else
{
echo "foo";
}
答案 3 :(得分:4)
因为您没有检查这些变量,所以它会说if (String)
将始终返回true。 (除非""
)
你应该这样做:
if(53==56 || 53==57 || 53==58)
{
echo "blah";
}
else
{
echo "foo";
}
答案 4 :(得分:4)
所有$condition*
变量都将评估为true。这就是PHP看到它的方式:
if("53==56" || "53==57" || "53==58")
你想要的是这个:
$condition1 = 53==56;
$condition2 = 53==57;
$condition3 = 53==58;
答案 5 :(得分:2)
这是因为你正在评估一个字符串,而空字符串以外的字符串评估为true。
答案 6 :(得分:2)
您正在将字符串连接在一起,非空字符串在php中等于TRUE
。
答案 7 :(得分:1)
因为当if传递时,$ condition是一个包含条件文本的字符串(连接)。尝试使用if(eval($condition))
。
答案 8 :(得分:1)
如果字符串非空,则字符串始终求值为true 并且btw php将隐式转换为boolean