Która funkcja PHP zamieni napis „ala ma kota” na „Ala ma kota”?
A.
ucwords("ala ma kota");
B.
ucfirst("ala ma kota");
C.
strtoupper("ala ma kota");
D.
strtolower("ala ma kota");
Funkcja ucfirst() jest tutaj właściwym wyborem, bo zmienia na wielką tylko pierwszą literę całego napisu, a resztę tekstu zostawia bez zmian. Dla wartości 'ala ma kota' wynik będzie dokładnie taki: 'Ala ma kota'. To pasuje do treści pytania, gdzie chodzi wyłącznie o podniesienie pierwszego znaku zdania, a nie wszystkich wyrazów ani wszystkich liter. W praktyce taka funkcja przydaje się np. przy formatowaniu imion, tytułów wpisów, komunikatów albo tekstów wyświetlanych użytkownikowi po pobraniu z formularza. Moim zdaniem warto pamiętać, że ucfirst() działa dobrze dla prostych tekstów ASCII, takich jak ten przykład, ale przy polskich znakach i kodowaniu UTF-8 trzeba już uważać. W profesjonalnych aplikacjach PHP lepiej pilnować kodowania danych i w razie potrzeby używać funkcji z rodziny mb_ albo własnego rozwiązania obsługującego znaki wielobajtowe. Dobra praktyka jest taka, żeby formatowanie tekstu robić świadomie, najlepiej blisko warstwy prezentacji, a nie przypadkiem zmieniać dane zapisane w bazie.
W tym pytaniu łatwo pomylić funkcje, bo wszystkie dotyczą zmiany wielkości liter w napisie, ale każda robi coś trochę innego. strtolower() zamienia cały tekst na małe litery, więc z 'ala ma kota' otrzymamy nadal 'ala ma kota'. Taka funkcja jest przydatna na przykład przy normalizacji loginów, adresów e-mail albo porównywaniu tekstów bez rozróżniania wielkości liter, ale nie podnosi pierwszej litery zdania. strtoupper() działa w drugą stronę i zamienia wszystkie litery na wielkie, więc wynik byłby 'ALA MA KOTA'. To już zupełnie inny efekt, często używany w nagłówkach, skrótach czy oznaczeniach, ale nie wtedy, gdy chcemy naturalny zapis zdania. ucwords() wygląda kusząco, bo też zaczyna od liter 'uc', jednak ta funkcja zmienia pierwszą literę każdego wyrazu. Dla podanego tekstu dałaby 'Ala Ma Kota', a to nie jest to samo co 'Ala ma kota'. Typowy błąd myślowy polega na tym, że ktoś kojarzy nazwę funkcji tylko ogólnie z dużymi literami, zamiast sprawdzić zakres działania: cały tekst, pierwszy znak całego łańcucha czy pierwsze znaki wszystkich wyrazów. Z mojego doświadczenia najlepiej zapamiętać to praktycznie: ucfirst() dla początku zdania, ucwords() dla tytułów typu nazwa książki, strtolower() do ujednolicania na małe litery, a strtoupper() do zapisu wersalikami. W PHP takie drobne różnice są ważne, bo źle dobrana funkcja może zmienić sens prezentowanych danych, niby mała rzecz, a potem wygląda nieprofesjonalnie w interfejsie.