Funkcja zapisana w języku PHP ma przedstawioną postać. Jej zadaniem jest
function fun1($liczba) { if($liczba % 3 == 0) return 1; return 0; }
A. wypisanie liczby podzielnej przez 3
B. zwrócenie wartości 1, gdy liczba jest podzielna przez 3
C. zwrócenie wartości 0, gdy liczba jest podzielna przez 3
D. wypisanie liczby niepodzielnej przez 3
W tej funkcji kluczowe są dwa elementy: operator modulo % oraz instrukcja return. Wyrażenie $liczba % 3 oblicza resztę z dzielenia zmiennej $liczba przez 3. Jeżeli reszta wynosi 0, to znaczy, że liczba dzieli się przez 3 bez reszty, więc warunek $liczba % 3 == 0 jest spełniony. Wtedy funkcja od razu zwraca wartość 1. Jeśli warunek nie zostanie spełniony, program przechodzi dalej i zwraca 0. Ważne: funkcja niczego nie wypisuje na ekran, bo nie ma tu echo, print ani podobnej instrukcji. Ona tylko oddaje wynik do miejsca, z którego została wywołana. W praktyce taką funkcję można użyć np. przy sprawdzaniu poprawności danych, filtrowaniu liczb w tablicy albo przy prostym warunku w formularzu. Moim zdaniem warto też zauważyć, że w dobrym stylu PHP funkcja tego typu mogłaby zwracać true albo false, bo sprawdza warunek logiczny, ale 1 i 0 też są często spotykane, szczególnie w prostych zadaniach szkolnych i starszym kodzie.
Najczęstsze nieporozumienie w tym zadaniu wynika z pomylenia zwracania wartości z wypisywaniem tekstu lub liczby na ekran. W PHP instrukcja return kończy działanie funkcji i przekazuje wartość do kodu, który tę funkcję wywołał. Nie powoduje ona automatycznego wyświetlenia wyniku w przeglądarce. Do wypisywania służyłyby raczej echo, print albo np. wygenerowanie fragmentu HTML. Dlatego interpretowanie tej funkcji jako mechanizmu wypisującego liczbę podzielną lub niepodzielną przez 3 jest nietrafione, choć da się zrozumieć skąd ten błąd się bierze, bo w wielu pierwszych ćwiczeniach programistycznych wynik od razu pokazuje się użytkownikowi. Tutaj jednak wynik jest tylko zwracany. Drugi ważny temat to sens warunku $liczba % 3 == 0. Operator % zwraca resztę z dzielenia. Gdy reszta z dzielenia przez 3 wynosi 0, liczba jest podzielna przez 3. Wtedy funkcja zwraca 1, a nie 0. Wartość 0 pojawia się dopiero wtedy, gdy warunek nie zostanie spełniony, czyli gdy liczba nie jest podzielna przez 3. Z mojego doświadczenia dobrze jest czytać takie funkcje linijka po linijce: najpierw sprawdzić warunek, potem zobaczyć, co dokładnie jest zwracane w gałęzi prawdziwej, a co poza nią. To bardzo praktyczny nawyk przy debugowaniu kodu PHP.