2010-11-18 16 views
20

mam instrukcji warunkowej w następujący sposób:PHP Lazy logiczna ocena

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

Czy PHP ma leniwe ocenę logiczną, to będzie to sprawdzić $boolean a jeśli nie jest to fałszywa przeszkadza wykonywania kosztownych operacji? Jeśli tak, to w jakiej kolejności powinienem umieścić moje zmienne?

+0

bym generalnie powstrzymać się od wprowadzenia 2 operacje w tej samej linii kodu, jeśli nie są one nieodłącznie związane. Utrudnia to czytelność i nie zyskujesz czasu lub zasobów obliczeniowych. –

+1

Apoliki za moją niepoprawną odpowiedź (teraz usunięta). Myślałem, że pamiętam, jak próbowałem tego i odkryłem, że to nie działa, ale oczywiście jestem w błędzie. –

+0

@Nathan Przynajmniej dostałeś odznakę Peer Pressure :) –

Odpowiedz

23

Tak jest. Nazywa się to oceną zwarć. Zobacz komentarze na temat documentation page ...

Jeśli chodzi o zamówienie, wykonuje kontrole na podstawie Operator Precedence, a następnie od lewej do prawej. Więc:

A || B || C 

oceni pierwszą, a następnie B tylko jeśli A jest fałszywe i C tylko wtedy, gdy oba A i B są fałszywe ...

Ale

A AND B || C 

zawsze oceń B || C, ponieważ || ma wyższy priorytet niż AND (nieprawda w przypadku &&).

+0

jeśli * chcesz * ocena bez obwodu, możesz użyć pojedynczej funkcji, która byłaby funkcją boolowską. Obliczyłoby to obie wartości, a następnie spróbowałoby wykonać pomiędzy nimi AND. – Mikhail

+8

@Mikhail: Tak. Ale musisz być ostrożny, ponieważ singiel '&' jest w rzeczywistości operatorem trochę mądrym. Tak więc 'true & 2' będzie fałszywe (ponieważ' true' to '00000001', a' 2' to '00000010', więc' AND' to '00000000') ... – ircmaxell

+0

@Alin: Dzięki! Dam google zabrał mnie do niewłaściwych dokumentów ... Naprawiono w odpowiedzi. Dzięki! – ircmaxell