Kto trafił szóstkę?
Poprzedni artykuł zakończyłem krótkim zadaniem. Prosiłem o policzenie, bez wykonywania tego kodu na serwerze, jaką liczbę wyświetli poniższy kod.
<?php $a=8; echo $a--+5*--$a+3*$a--+$a++-2*$a; ?> |
Nie kwapiliÅ›cie siÄ™ specjalnie z odpowiedziami. Nie wiem, czy to brak pewnoÅ›ci siebie, by ujawnić swoje obliczenia, czy niechęć do liczenia czegokolwiek. Fakty sÄ… takie, że 3 osoby podaÅ‚y 5 odpowiedzi, a żadna z nich nie byÅ‚a poprawna. W zwiÄ…zku z tym postanowiÅ‚em wyjaÅ›nić ten, przyznam że podchwytliwy, przykÅ‚ad. W tym celu rozbijÄ™ obliczenia na kilka kolejnych etapów, z których każdy opatrzÄ™ komentarzem. Dla przypomnienia: ++ zwiÄ™ksza wartość zmiennej o 1, –– zmniejsza. Operator przed zmiennÄ… zmienia jej wartość przed jej użyciem, za zmiennÄ… po jej użyciu
<?php $a=8; echo $a--; //W tej linii operator zmniejsza wartość zmiennej o 1, ale po jej użyciu. //$a jest równe 7, ale użyte w instrukcji (wyświetlone) było 8 //(operator za zmienną). $a=8; echo $a--+5*--$a; //Do 8 dodajemy 5*6. Wartość zmiennej $a została ponownie zmniejszona. //Tym razem przed jej użyciem (operator przed zmienną). Instrukcja wyświetli 38 $a=8; echo $a--+5*--$a+3*$a--; //Do 38 dodajemy 3*6, ale $a równe jest 5. Użyta była wartość przed //zmniejszeniem (operator za zmienną). Instrukcja wyświetli 56 $a=8; echo $a--+5*--$a+3*$a--+$a++; //Do 56 dodajemy poprzednią wartość $a czyli 5, a następnie //zwiększamy ją o 1 (operator za zmienną). Instrukcja wyświetli 61 $a=8; echo $a--+5*--$a+3*$a--+$a++-2*$a; //Od 61 odejmujemy 2*6. Instrukcja wyświetli 49 ?> |
Tagi: dekrementacja, inkrementacja, operatory, PHP