Tutaj &&
pełniące funkcję operatora short-circuit (patrz również przykład kodu here).
- Jeśli
$autoClean
ocenia się true
, $this->unsetErrorMessages()
będzie być wykonywany.
- Jeśli
$autoClean
ocenia się false
, $this->unsetErrorMessages()
nie być wykonywany.
Zastosowanie ||
zamiast &&
spowodowałoby odwrócenie tego zachowania.
To samo zachowanie można oczywiście osiągnąć również poprzez dodanie dodatkowej instrukcji if
. Czyniąc tak:
Chociaż użycie operatorów zwarcia może zmniejszyć liczba linii, może również utrudnić odczyt kodu.
Pod względem prędkości wykonania nie powinno być zauważalnej różnicy.
Aktualizacja
muszę wycofać moje wcześniejsze stwierdzenie o ponieważ żadna zauważalna różnica w szybkości wykonania. Biorąc pod uwagę następujące dwa skrypty testowe, czyli wersja z operatorem zwarcia:
<?php
$a = true;
function b() { global $a; $a = !$a; }
for ($i = 0; $i < 10000000; $i++) {
$a && b();
}
?>
oraz wersja z oświadczeniem if
:
<?php
$a = true;
function b() { global $a; $a = !$a; }
for ($i = 0; $i < 10000000; $i++) {
if($a) { b(); }
}
?>
Okazuje się, że druga wersja (z if
oświadczenie) jest około 40% szybsze (~ 450ms vs. ~ 750ms) na mojej wersji PHP 5.5.9 uruchomiony na Ubuntu 14.04 LTS (64-bitowy).
Wyniki mogą się różnić w zależności od wersji PHP i systemów operacyjnych, ale przynajmniej na moim komputerze konsekwentnie zauważam znaczną różnicę w szybkości realizacji.
Dzięki za odpowiedź. Działa ............ –