php"if"条件之谜

sni*_*per 4 php if-statement

我遇到了一个有趣的"if"条件:

$condition1="53==56";
$condition2="53==57";
$condition3="53==58";
$condition=$condition1."||".$condition2."||".$condition3;
if($condition)
{
    echo "blah";
}
else
{
    echo "foo";
}
Run Code Online (Sandbox Code Playgroud)

为什么if条件通过?为什么php回应"等等"?我该怎么做才能让php评估"if"语句并打印"foo"?

Cal*_*vis 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
}
Run Code Online (Sandbox Code Playgroud)

  • 当您使用双引号时,PHP会尝试解析该字符串的内容.例如,如果您有字符串"Hello $ name!" 在双引号中,PHP将查看字符串中的变量名称,并将其替换为变量的值(如果存在).这一切都很好,但它浪费时间(最小的数量,但它都加起来).不解析单引号中的字符串.我尽可能使用单引号.这也意味着你可以回复HTML,就像`echo'<div id ="header">';`而不必转义双引号.:) (4认同)

Woo*_*ble 7

你正在评估字符串为布尔值; 他们将是真实的(除了字符串"""0".删除你的程序中几乎所有的引号.


cee*_*yoz 5

那些不是条件,它们是字符串.

$condition1=53==56;
$condition2=53==57;
$condition3=53==58;
$condition=$condition1 || $condition2 || $condition3;
if($condition)
{
    echo "blah";
}
else
{
    echo "foo";
}
Run Code Online (Sandbox Code Playgroud)