我想知道,这适用于任何主要的PHP版本吗?
if ($foo != $bar && '' != $str = some_function($some_variable))
echo $str;
some_function($some_variable)
返回一个字符串,该字符串分配给$str
变量,然后检查是否为空字符串。 $str
变量当然会在以后使用。
在每个主要PHP版本(> 5)中分配给some_function
变量的$str
的输出是什么?我无法找到有关此信息的任何信息。感谢。
我目前正在运行5.4并且正在运行。
编辑:为避免进一步混淆,$foo != $bar
位于另一个表达式之前,因为$str
变量仅在if语句中使用。对不起,我忘了澄清一下。
答案 0 :(得分:4)
是的它确实有效,但为了让它像你想要的那样工作,你必须在赋值周围加上括号,因为比较的优先级高于赋值! (operator precedence)
如果$foo != $bar
为false,$str
永远不会初始化,所以也要更改顺序,以便随时分配。
所以使用这个:
if ('' !== ($str = some_function($some_variable)) && $foo != $bar)
//^^^ ^ See here And here^
//| '!==' to also check the type
答案 1 :(得分:2)
我不明白为什么这不适用于任何PHP版本(> 5)。 在此测试:http://sandbox.onlinephpfunctions.com/code/a295189c50c191bbd0241d4e8ea4e3081cdb40ae
使用4.4.9及更高版本的所有版本。
注意:因为您正在使用&&运算符,&& amp;之后的代码如果$ foo!= $ bar已经返回false,则不会运行,因为第二个表达式不能改变&&的结果运算符,因此它会忽略它。
如果分配意图始终发生,则更改表达式的顺序。
if ('' != $str = some_function($some_variable) && $foo != $bar)
echo $str;
答案 2 :(得分:1)
为什么不用括号和花括号来表达清楚而不是混淆。例如:
if (($foo != $bar) && '' != ($str = some_function($some_variable)) ) {
echo $str;
}