2011-06-22 7 views
4

次のコード:PHPのor演算子の使用ですか?

$result = (false or true); 
    echo("With extra parentheses: ".($result?"true":"false")); 
    $result = false or true; 
    echo("<br />With no parentheses: ".($result?"true":"false")); 

は出力を生成します。

With extra parentheses: true 
With no parentheses: false 

私は理由を理解していません。最初にfalseをテストしてから$result = false or true;を評価してはなりません。そして、それは真ではないので、trueを評価するために進んでいますか?

ご提案いただければ幸いです。

答えて

14

or演算子は、代入演算子よりも弱い優先順位を持ちます。 2番目のケースで実際に起こるのは($result = false) or trueなので、部分or trueは実際には効果がありません。

この場合、代入演算子は割り当てられた値を結果として返します。この場合はfalseです。代入演算子は、副作用があるという唯一の違いを伴い、結果(たとえば、+<orなど)をもたらす通常の2項演算子と考えることができます。

括弧を避ける場合は、優先度がより高い||orを入れ替えることができます。

論理演算子の英語版を使用する場合は、その優先順位が異なるため、常に注意が必要です。

関連する問題