2010-11-18 13 views
20

私はこのように条件文を持っている:PHPレイジーブール評価

if($boolean && expensiveOperation()){ ...} 

は、PHPは、すなわち、それは$booleanをチェックし、それがfalseの場合、高価な操作を実行する気にしないだろう、怠惰なブール評価を持っていますか?もしそうなら、どのような順序で私の変数を置くべきですか?

+0

:あなたの例では、それを適切に使用するだろう。読みやすさが難しくなり、コンピューティング時間やリソースが得られません。 –

+1

私の間違った答えのためのApols(今削除されました)。私はこれを試したことを思い出し、それがうまくいかないと思ったが、明らかに間違っている。 –

+0

@ Nathan少なくともPeer Pressureバッジを持っています:) –

答えて

23

はい、あります。それは短絡評価と呼ばれています。 documentation pageのコメントを参照してください。

注文については、Operator Precedenceに基づいてチェックを行い、次に左から右にチェックします。だから、:

A || B || C 

は、AがAとBの両方が偽である場合にのみ、偽、およびCである場合にのみ、B、最初の評価、そしてウィル...

しかし

A AND B || C 

は常に||ANDより高い優先順位を持つため(&&では該当しません)、B || Cを評価してください。

+0

*ショアサーキットでない評価が必要な場合は、単一の&を使用することができます。これは論理和関数です。両方の値を計算し、それらの間でANDを実行しようとします。 – Mikhail

+8

@Mikhail:はい。しかし、単精度の '&'は実際にはビット単位の演算子であるため、注意する必要があります。したがって、「true&2」はfalse(「真」は「00000001」、「2」は「00000010」なので「AND」は「00000000」となります)... – ircmaxell

+0

@Alin:ありがとう!ダムGoogleは間違ったドキュメントに私を連れて行った...答えに固定。ありがとう! – ircmaxell