排序如何在if语句的表达式中产生差异

时间:2014-05-28 11:32:38

标签: php if-statement

我有一个阵列......

$a= array(1,2,3,4);
if (expr)
{ echo "if";
}
else
{ echo 'else';
}

当expr为($ a =''|| $ a =='false')时,输出为“if”,

但当expr为($ a =='false'|| $ a ='')时,输出为“else”

任何人都可以解释为什么&如何排序有所作为?

编辑:我知道我正在为$ a分配''。那不是问题。真正的问题是:表达式$a = ''返回什么?为什么反转2种情况的顺序会将我们从IF部分切换到ELSE部分?

再次:我理解我指定不比较。请按原样回答问题。

4 个答案:

答案 0 :(得分:3)

首先,永远不要将=用作比较运算符。它是赋值运算符。

不同之处在于false(作为布尔值)与作为字符串的'false'不同。

PHP会对某些表达式进行类型化处理,以便与您的预期有所不同。

false==""
// TRUE.

false=="false"
// FALSE.

此外,当您尝试将数字与字符串进行比较时,PHP将尝试处理数据,以便进行比较。它有很多东西(比我在这里发布的要多得多)但你会很好地调查类型杂耍和各种运算符。这是docs are a great start。您还应该阅读comparison operators,其中详细介绍了各种比较的工作原理(具体取决于您是使用==还是===)。

答案 1 :(得分:1)

使用$a = '',您将$ a设置为空字符串。这与:

相同
$a = '';
if($a){
    echo 'if';
}

||运算符检查第一个条件是否为真,如果是,则继续使用括号中的代码。在PHP中,如果将$a设置为任何内容,则会返回true。在第二种情况下,$a不等于字符串 'false'(您不会将它与布尔值假偶数相比!),因此它会执行else部分中的代码。

而Fluffeh并不完全正确。你可以非常有效地使用if条件中的赋值运算符,你只需要聪明一点。

答案 2 :(得分:0)

$a = ''是一项任务:您错误地使用=代替==。赋值是一个表达式,它具有您指定的东西的值。

答案 3 :(得分:0)

单个等号=是赋值操作符,因此$a = ''将空字符串分配给$a,而不检查它是否等于。

在第一个示例中,将$a的值设置为空字符串,然后检查它是否为false。

表示条件为真,因此空的tring在php中评估为false

在第二个示例中,检查$a是否等于false 1st(当$a的值是数组时),因此条件为false