Która pętla w języku PHP pozwala wykonać operacje na wszystkich elementach tablicy z automatycznym indeksowaniem jej elementów?
A. for
B. while
C. do...while
D. foreach
Pytanie z egzaminu CKE, styczeń 2021 (arkusz EE.09-SG-21.01).
Odpowiedź foreach jest właściwa, bo właśnie ta pętla w PHP została zaprojektowana do przechodzenia po elementach tablicy bez ręcznego pilnowania licznika, warunku końca i zwiększania indeksu. W praktyce piszesz na przykład: foreach ($produkty as $produkt) i PHP samo pobiera kolejne elementy tablicy od początku do końca. Jeśli potrzebujesz też indeksu albo klucza, możesz użyć składni foreach ($produkty as $id => $produkt). To jest bardzo wygodne przy tablicach indeksowanych i asocjacyjnych, np. podczas wyświetlania listy użytkowników, produktów w sklepie, wyników z formularza albo rekordów pobranych z bazy danych. Moim zdaniem to jedna z tych konstrukcji, które naprawdę porządkują kod, bo zmniejszają ryzyko pomyłki typu zły indeks albo przekroczenie zakresu tablicy. Dobra praktyka w PHP jest taka, żeby do iterowania po tablicach używać foreach, gdy nie trzeba wykonywać skomplikowanej kontroli nad licznikiem. Pętle for i while też się da wykorzystać, ale zwykle kod będzie wtedy mniej czytelny i bardziej podatny na drobne błędy.
W tym pytaniu chodzi o pętlę, która jest naturalnie przeznaczona do pracy z tablicami w PHP i sama przechodzi przez ich elementy. Pętle for, while oraz do...while są ogólnymi konstrukcjami sterującymi, ale nie dają tak wygodnego, automatycznego dostępu do elementów tablicy jak foreach. Przy for trzeba zwykle samodzielnie utworzyć licznik, np. $i = 0, sprawdzać warunek $i < count($tablica) i zwiększać $i. To działa dla prostych tablic indeksowanych numerycznie, ale robi się mniej przyjemne przy tablicach asocjacyjnych, gdzie klucze mogą być tekstowe, np. imie, email, rola. Z mojego doświadczenia właśnie tu dużo osób łapie się na myśleniu, że skoro for jest klasyczną pętlą, to będzie najlepsza do wszystkiego. Nie zawsze. while wymaga jeszcze większej kontroli ze strony programisty, bo trzeba samemu ustalić warunek zatrzymania oraz zadbać, żeby pętla nie stała się nieskończona. do...while dodatkowo wykona blok kodu przynajmniej raz, nawet jeśli warunek od początku jest fałszywy, więc przy przetwarzaniu tablic może to prowadzić do niepotrzebnych lub błędnych operacji. foreach rozwiązuje ten problem prościej: bierze każdy element po kolei, obsługuje klucze i wartości, a kod jest czytelny dla innych programistów. W projektach webowych, zwłaszcza przy PHP generującym HTML z danych, taka czytelność to naprawdę spora zaleta.