foreach z referencją w PHP

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

Instrukcja foreach służy w PHP do przechodzenia po elementach tablicy. Standardowo zmienna używana w pętli otrzymuje kopię wartości elementu tablicy. Oznacza to, że zmiana tej zmiennej nie zmienia zawartości tablicy.

Jeżeli przed zmienną zostanie użyty znak &, pętla działa na referencji do elementu tablicy. Wtedy modyfikacja zmiennej w pętli zmienia bezpośrednio element tablicy.

Przykład

$tab = [2, -5, 7];

foreach ($tab as &$liczba) {
    $liczba = $liczba * (-1);
}
unset($liczba);

print_r($tab);

Wynik:

Array
(
    [0] => -2
    [1] => 5
    [2] => -7
)

Każdy element tablicy został pomnożony przez -1, czyli otrzymał przeciwny znak.

Po co jest unset() po pętli?

Po użyciu foreach z referencją zmienna, np. $liczba, nadal wskazuje na ostatni element tablicy. Może to prowadzić do trudnych błędów przy dalszym użyciu tej zmiennej.

Dlatego po zakończeniu pętli często zapisuje się:

unset($liczba);

Instrukcja ta usuwa powiązanie referencyjne zmiennej z ostatnim elementem tablicy.

Najważniejsze do egzaminu

  • foreach ($tab as $liczba) przechodzi po kopiach wartości.
  • foreach ($tab as &$liczba) pozwala zmieniać elementy tablicy.
  • * (-1) zmienia znak liczby na przeciwny.
  • unset($liczba) po pętli z referencją zabezpiecza przed przypadkową zmianą ostatniego elementu tablicy.