我有一个阵列......
$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部分?
再次:我理解我指定不比较。请按原样回答问题。
答案 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。
在第二个示例中,检查$a
是否等于false 1st(当$a
的值是数组时),因此条件为false