Inkrementacja i dekrementacja w PHP

Słownik kwalifikacji INF.03 - Tworzenie i administrowanie stronami i aplikacjami internetowymi oraz bazami danych

Inkrementacja to zwiększenie wartości zmiennej o 1, a dekrementacja — zmniejszenie jej o 1. W PHP służą do tego operatory:

Infografika: inkrementacja i dekrementacja w PHP — operatory ++ i -- zwiększające i zmniejszające wartość zmiennej o 1, różnica między post i pre oraz zastosowanie w pętlach for i do-while.
  • ++ — zwiększa wartość zmiennej o 1,
  • -- — zmniejsza wartość zmiennej o 1.

Operatory te są najczęściej używane do sterowania pętlami i zliczania. Trafiają się w pytaniach egzaminacyjnych z kwalifikacji INF.03 (Tworzenie i administrowanie stronami i aplikacjami internetowymi oraz bazami danych) — najczęściej w kontekście wyniku działania pętli for lub do…while.

Operator inkrementacji ++

Zapis:

$a++;

jest równoważny:

$a = $a + 1;
$a += 1;

Przykład:

$a = 1;
$a++;
echo $a; // 2

Operator dekrementacji --

Zapis:

$a--;

jest równoważny:

$a = $a - 1;
$a -= 1;

Przykład:

$a = 5;
$a--;
echo $a; // 4

Preinkrementacja i postinkrementacja

Operatory mogą występować przed lub po zmiennej:

++$a; // preinkrementacja
$a++; // postinkrementacja

Jeśli operator jest użyty jako osobna instrukcja, efekt końcowy jest taki sam — wartość zmiennej zwiększa się o 1. Różnica pojawia się dopiero w większym wyrażeniu:

$a = 1;
$b = $a++; // $b = 1, potem $a = 2  (post — najpierw użyj, potem +1)

$a = 1;
$b = ++$a; // najpierw $a = 2, potem $b = 2  (pre — najpierw +1, potem użyj)

Analogicznie działa dekrementacja: --$a zmniejsza przed użyciem wartości, $a-- po użyciu.

Przykład sekwencji instrukcji

$a = 1;
$a++;      // $a = 2
$a += 10;  // $a = 12
--$a;      // $a = 11

Po wykonaniu zmienna $a ma wartość 11.

Inkrementacja w pętli for

Najczęstsze zastosowanie ++ w PHP to sterowanie pętlą for:

for ($i = 0; $i <= 10; $i++) {
    echo $i . " ";
}

Ile razy wykona się pętla?

Pętla wykonuje się dopóki warunek jest spełniony. Tutaj $i zaczyna od 0 i rośnie po jeden. Warunek $i <= 10 jest prawdziwy dla wartości 0, 1, 2, …, 10 — czyli pętla wykona się 11 razy.

Zasada: dla for ($i = a; $i <= b; $i++) liczba iteracji wynosi b - a + 1. Uważaj na różnicę:

  • $i <= 10 → 11 iteracji (0…10),
  • $i < 10 → 10 iteracji (0…9).

Co wypisze pętla?

Przy określaniu, co wypisze pętla, śledzi się wartość zmiennej kontrolnej w każdym przebiegu. Dla for ($i = 1; $i <= 5; $i++) echo $i*2 . " "; wynikiem będzie 2 4 6 8 10.

Pętla do…while z licznikiem

W zadaniach często pojawia się pętla do…while, w której licznik narasta, a warunek sprawdza sumę:

$a = $x = 0;
do {
    $a++;
    $x = $x + $a;
} while ($x != 21);

Trzeba prześledzić iteracje krok po kroku:

iteracja$a$x po dodaniu
110 + 1 = 1
221 + 2 = 3
333 + 3 = 6
446 + 4 = 10
5510 + 5 = 15
6615 + 6 = 21 — warunek $x != 21 przestaje być spełniony, koniec

Pętla wykona się 6 razy. Charakterystyczne, że w do…while warunek jest sprawdzany po wykonaniu bloku, więc pętla zawsze wykona się co najmniej raz.

Wypisanie n znaków — str_repeat

Jeżeli pętlę z inkrementacją używa się tylko po to, żeby wypisać n powtórzeń tego samego znaku (np. n znaków @), w PHP istnieje gotowa funkcja str_repeat:

echo str_repeat("@", $n);

To krótsza i czytelniejsza alternatywa dla pętli for z licznikiem. Jeśli pytanie brzmi „jaką funkcją wyświetlić ciąg n znaków @", odpowiedzią jest str_repeat.

Częste pomyłki — nie myl tego!

  • $a++++$a — jako samodzielna instrukcja dają ten sam efekt, ale w wyrażeniu typu $b = $a++ różnią się wynikiem.
  • $a++$a + 1$a++ zmienia wartość zmiennej, $a + 1 tylko wylicza, nie zmieniając $a.
  • for ($i = 0; $i <= 10; $i++) to 11 iteracji, a nie 10 — <= wlicza wartość 10 do zakresu.
  • do…while zawsze wykona się co najmniej raz — warunek jest sprawdzany na końcu, w odróżnieniu od while, gdzie sprawdzany jest na początku.
  • echo n znaków to nie pętla, tylko str_repeat — najprostsza poprawna odpowiedź na egzaminie.
  • postdekrementacja w wyrażeniu zwraca starą wartość$b = $a-- daje $b = $a (starą), a $a dopiero potem maleje.

Najważniejsze do zapamiętania

W PHP $a++ jest równoważne zapisom $a += 1 i $a = $a + 1. Operator może być przed (++$a — pre) lub po ($a++ — post) zmiennej, a różnica liczy się tylko w wyrażeniach. W pętli for ($i = a; $i <= b; $i++) liczba iteracji wynosi b - a + 1. Pętla do…while zawsze wykona się co najmniej raz. Do wypisania n powtórzeń znaku użyj funkcji str_repeat.