Pamiętam, jak kiedyś czytałem o operatorach logicznych, które w przypadku OR
użycia ||
były lepsze niż or
(lub odwrotnie).
Po prostu musiałem to wykorzystać w moim projekcie, kiedy do mnie wróciło, ale nie pamiętam, który operator został polecony, ani czy to w ogóle prawda.
Który jest lepszy i dlaczego?
php
operators
logical-operators
or-operator
Jego zdaniem
źródło
źródło
$e = true || $x = 'foo'
nie zdefiniuje z$x
powodu zwarcia, nie z powodu wyższego priorytetu.27 or 0
wraca27
po mnie.or
zwracając również wartość logiczną. Po prostu jego pierwszeństwo jest tak niskie, że czasami wygląda na to, że robi coś innego. :)print 27 or 0
zostanie wydrukowane,27
ponieważor
nastąpi późniejprint 27
. BTW,echo
nie daje się nabrać -echo 27 or 0
wyjdzie1
.Są używane do różnych celów iw rzeczywistości mają różne priorytety operatorów.
&&
I||
operatorów logicznych przeznaczone do warunków, przy czymand
ior
są przeznaczone do sterowania przepływem.Na przykład następujący warunek jest logiczny:
Różni się to od przepływu sterowania:
źródło
die()
funkcja zostanie wywołana, jeślidoSomething()
zwrócifalse
lubnull
? Co jeślidoSomething()
wrócitrue
lub nic?doSomething()
jest oceniany jako wartość logiczna. Jeśli zwraca wartość, którą PHP uważa za prawdziwą (true
niepusty ciąg znaków itp.), Nie wywoładie()
.Różnica między odpowiednio || oraz OR i && i AND to pierwszeństwo operatorów :
$bool = FALSE || TRUE;
($bool = (FALSE || TRUE))
$bool
wynosiTRUE
$bool = FALSE OR TRUE;
(($bool = FALSE) OR TRUE)
$bool
wynosiFALSE
$bool = TRUE && FALSE;
($bool = (TRUE && FALSE))
$bool
wynosiFALSE
$bool = TRUE AND FALSE;
(($bool = TRUE) AND FALSE)
$bool
wynosiTRUE
źródło
Źródło: http://wallstreetdeveloper.com/php-logical-operators/
Oto przykładowy kod do pracy z operatorami logicznymi:
źródło
Wiem, że to stary temat, ale jednak. Właśnie spotkałem się z problemem w kodzie, który debuguję w pracy i może ktoś może mieć podobny problem ...
Powiedzmy, że kod wygląda następująco:
Można by się spodziewać (jak przyzwyczaiłeś się np. Z javascript), że gdy $ this-> position () zwróci false lub null, to $ position jest pustą tablicą. Ale tak nie jest. Wartość PRAWDA lub FAŁSZ zależy od tego, co zwraca $ this-> position ().
Jeśli chcesz uzyskać wartość $ this-> position () lub pustą tablicę, musisz użyć:
EDYTOWAĆ:
Powyższy przykład nie działa zgodnie z przeznaczeniem, ale prawda jest taka, że
||
ior
nie jest to samo ... Spróbuj tego:Oto wynik:
Tak więc w rzeczywistości trzecia opcja
?:
jest poprawnym rozwiązaniem, gdy chcesz ustawić zwracaną wartość lub pustą tablicę.Testowane w PHP 7.2.1
źródło
$positions = $this->positions() ?? [];
jest prawdopodobnie tym, czego chcesz.Nie sądzę, aby jeden był z natury lepszy od drugiego, ale sugerowałbym trzymać się || ponieważ jest to ustawienie domyślne w większości języków.
EDYCJA: Jak zauważyli inni, rzeczywiście istnieje różnica między nimi.
źródło
Nie ma nic złego ani lepszego, zależy to tylko od pierwszeństwa operatorów. Ponieważ
||
ma wyższy priorytet niżor
, więc||
jest najczęściej używany.źródło
Niektóre języki używają zwarcia, a inne używają pełnej oceny logicznej (jeśli wiesz, jest to podobne do dyrektywy
$B
w Pascalu).Objaśnienia:
W tym przykładzie funkcja
B()
nigdy nie zostanie wykonana. Ponieważ funkcjaA()
zwraca wartość PRAWDA, wynik instrukcji OR jest znany z pierwszej części bez konieczności obliczania drugiej części wyrażenia.Jednak w
( A() || B() )
przypadku drugiej części jest zawsze oceniana niezależnie od wartości pierwszej.Aby zoptymalizować programowanie, zawsze powinieneś używać tego,
OR
co jest szybsze (z wyjątkiem przypadku, gdy pierwsza część jest zwracana,false
a druga część musi być faktycznie oceniona).źródło
||
,B
nie zostanie wywołany. Oba operatory robią dokładnie to samo, z wyjątkiem tego, że pierwszeństwo jest inne.