所以我有一个以下类型的PHP语句:
if ($x=function($y) || $z == 50) {
我看到的情况是,如果$ z为50,则$ x未设置,因为该函数从未被调用过。 这真的有可能吗?我可以(而且确实)很容易解决这个问题,但我想我很困惑,这就是正在发生的事情,并希望确保我不会犯这样的错误 我试图找出如何评估这样的OR表达式。有没有一个地方可以看看php如何被“编译”?
答案 0 :(得分:16)
您有运营商优先问题。请检查此http://www.php.net/manual/en/language.operators.precedence.php
因为||
的优先级高于=
,因此您的表达式看起来真的如此
if (
$x = (
function($y) || ( $z == 50 )
)
)
而不是(我认为是你的意图)
if (
($x = function($y)) || ($z == 50)
)
答案 1 :(得分:12)
||
有higher precedence而非=
,这意味着您的表达式变为:
$x = (foo($y) || ($z == 50));
这意味着$x
始终为true
或false
。没别了。
尝试:
if( ($x = foo($y)) || ($z == 50))
或者,更具可读性:
$x = foo($y);
if( $x || $z == 50)