php“if”条件之谜

时间:2011-07-08 23:46:44

标签: php if-statement

我遇到了一个有趣的问题,带着恶作剧的“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”?

9 个答案:

答案 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