Która z przedstawionych funkcji języka PHP zamieni słowo „kota” na słowo „mysz” w napisie „ala ma kota”?
A.
replace("ala ma kota", "kota", "mysz");
B.
str_replace("kota", "mysz", "ala ma kota");
C.
str_replace("ala ma kota", "kota", "mysz");
D.
replace("kota", "mysz", "ala ma kota");
Pytanie z egzaminu CKE, styczeń 2021 (arkusz EE.09-SG-21.01).
Funkcja str_replace('kota', 'mysz', 'ala ma kota') jest właściwa, bo w PHP standardowa funkcja do zamiany fragmentów tekstu nazywa się właśnie str_replace. Jej kolejność argumentów jest bardzo ważna: najpierw podajemy szukany tekst, potem tekst zastępujący, a na końcu napis, w którym ma zostać wykonana zamiana. Czyli schemat wygląda tak: str_replace(szukaj, zamień_na, tekst_źródłowy). W tym przypadku PHP szuka słowa 'kota' w napisie 'ala ma kota' i podstawia w jego miejsce 'mysz', więc wynikiem będzie 'ala ma mysz'. W praktyce używa się tego np. do poprawiania treści wpisów, podmiany znaków w formularzach, przygotowania prostych adresów URL albo czyszczenia danych przed wyświetleniem. Z mojego doświadczenia warto zapamiętać, że str_replace nie zmienia automatycznie zmiennej „w miejscu” — zwraca nowy tekst, więc zwykle zapisuje się wynik np. do zmiennej. Dobra praktyka to też uważać na wielkość liter, bo str_replace jest czułe na wielkość znaków. Jeśli potrzeba zamiany bez rozróżniania liter, stosuje się str_ireplace.
W tym zadaniu najłatwiej pomylić się na dwóch rzeczach: nazwie funkcji oraz kolejności argumentów. W PHP nie ma standardowej funkcji replace działającej tak ogólnie jak w niektórych innych językach albo bibliotekach. Próba wywołania replace(...) w zwykłym PHP skończyłaby się błędem typu „undefined function”, chyba że ktoś wcześniej sam taką funkcję zdefiniował. W testach i w codziennym kodzie zakładamy jednak funkcje wbudowane w język, więc poprawną nazwą jest str_replace. Druga sprawa to układ parametrów. PHP oczekuje kolejności: tekst szukany, tekst zastępujący, tekst źródłowy. Jeżeli jako pierwszy argument podamy cały napis 'ala ma kota', a jako trzeci tylko 'mysz', to funkcja będzie próbowała znaleźć całe wyrażenie 'ala ma kota' wewnątrz tekstu 'mysz'. To logicznie nie ma sensu i wynik nie będzie oczekiwaną frazą 'ala ma mysz'. Typowy błąd myślowy bierze się stąd, że uczniowie czytają funkcję jak zdanie: „zamień w tym tekście to na tamto”, więc zaczynają od tekstu źródłowego. Niestety dokumentacja PHP ma konkretną sygnaturę i trzeba się jej trzymać. Moim zdaniem najlepiej zapamiętać to jako: najpierw czego szukam, potem na co zmieniam, a dopiero na końcu gdzie szukam. Taki sposób myślenia bardzo pomaga też przy pracy z tablicami zamian, bo str_replace potrafi podmieniać więcej niż jeden fragment tekstu naraz.