私はこのように条件文を持っている:PHPレイジーブール評価
if($boolean && expensiveOperation()){ ...}
は、PHPは、すなわち、それは$boolean
をチェックし、それがfalseの場合、高価な操作を実行する気にしないだろう、怠惰なブール評価を持っていますか?もしそうなら、どのような順序で私の変数を置くべきですか?
私はこのように条件文を持っている:PHPレイジーブール評価
if($boolean && expensiveOperation()){ ...}
は、PHPは、すなわち、それは$boolean
をチェックし、それがfalseの場合、高価な操作を実行する気にしないだろう、怠惰なブール評価を持っていますか?もしそうなら、どのような順序で私の変数を置くべきですか?
はい、あります。それは短絡評価と呼ばれています。 documentation pageのコメントを参照してください。
注文については、Operator Precedenceに基づいてチェックを行い、次に左から右にチェックします。だから、:
A || B || C
は、AがAとBの両方が偽である場合にのみ、偽、およびCである場合にのみ、B、最初の評価、そしてウィル...
しかし
A AND B || C
は常に||
がAND
より高い優先順位を持つため(&&
では該当しません)、B || C
を評価してください。
*ショアサーキットでない評価が必要な場合は、単一の&を使用することができます。これは論理和関数です。両方の値を計算し、それらの間でANDを実行しようとします。 – Mikhail
@Mikhail:はい。しかし、単精度の '&'は実際にはビット単位の演算子であるため、注意する必要があります。したがって、「true&2」はfalse(「真」は「00000001」、「2」は「00000010」なので「AND」は「00000000」となります)... – ircmaxell
@Alin:ありがとう!ダムGoogleは間違ったドキュメントに私を連れて行った...答えに固定。ありがとう! – ircmaxell
はい、PHPはshort-circuit evaluationです。
PHPの回路が短絡しています。彼らは本質的に関連していない場合、私は、一般的に同じコード行で2つの操作を置くことを控えるだろう
http://en.wikipedia.org/wiki/Short-circuit_evaluation#Support_in_common_programming_languages
:あなたの例では、それを適切に使用するだろう。読みやすさが難しくなり、コンピューティング時間やリソースが得られません。 –
私の間違った答えのためのApols(今削除されました)。私はこれを試したことを思い出し、それがうまくいかないと思ったが、明らかに間違っている。 –
@ Nathan少なくともPeer Pressureバッジを持っています:) –