Skip to content

Blok 3

Podsumowanie bloku 2 na 25 pracach: 8 dwójek, 9 jedynek za nazwę albo miejsce pliku, 3 pliki, które się nie otwierają albo mają niedomknięty HTML. Większość jedynek nie dotyczyła kodu, tylko tego, jak plik został nazwany i oddany.

Trzy wnioski z bloku 2. Nazwa pliku jest częścią zadania, tak jak na arkuszu egzaminacyjnym. Przed oddaniem trzeba odświeżyć stronę i sprawdzić, czy się otwiera. Funkcje definiuje się na górze pliku, nie w środku tabeli. Wspólna praca nad zadaniem jest dozwolona, ale każdy broni tego, co oddaje.

Na otwarciu bloku quiz z funkcji: kod na slajdzie, potem odsłona.

Pytanie 1: funkcja robi echo zamiast return, a jej wynik trafia do tablicy. Czasy wypisują się od razu i w złym miejscu, sklejone ze sobą, a tablica zostaje pusta, bo funkcja niczego nie zwróciła.

Odpowiedź: b. echo wypisuje natychmiast w miejscu wywołania, a funkcja bez return oddaje null, więc tablica zawiera puste wartości.

Pytanie 2: funkcja oblicza średnią, ale nie ma return. Wywołujący dostaje null, bez żadnego ostrzeżenia, więc obliczenie przepada.

Odpowiedź: c. Brak return nie jest błędem dla PHP, więc nic nie ostrzeże — dlatego ten błąd trudno zauważyć.

Pytanie 3: funkcja próbuje użyć zmiennej zadeklarowanej poza nią. Zmienna z zewnątrz nie istnieje wewnątrz funkcji, więc PHP ostrzega o nieznanej zmiennej, a potem strona pada na count(null). Dane wchodzą do funkcji przez parametr.

Odpowiedź: c. Funkcja widzi wyłącznie swoje parametry. Żeby użyła danych z zewnątrz, trzeba jej je przekazać.

Pytanie 4: w funkcji są dwa return. Wykonuje się pierwszy i na nim funkcja się kończy, więc drugi nigdy nie zadziała.

Odpowiedź: a. Pierwszy return kończy działanie funkcji. Wykorzystuje się to do wczesnego wyjścia, na przykład gdy lista jest pusta.

Pytanie 5: funkcja z parametrem domyślnym. Wywołana bez drugiego argumentu używa wartości domyślnej, wywołana z argumentem — tej podanej.

Odpowiedź: a. Pierwsze wywołanie używa domyślnego dwukropka, drugie podanego separatora.

Pytanie 6: wywołanie funkcji bez nawiasów. PHP szuka wtedy stałej o takiej nazwie, nie znajduje jej i zgłasza błąd. Funkcję wywołuje się z nawiasami, nawet gdy nie ma argumentów.

Odpowiedź: c. Bez nawiasów PHP traktuje nazwę jako stałą, a nie jako wywołanie funkcji.

Pytanie zapasowe: nazwy funkcji w PHP nie rozróżniają wielkości liter, więc formatczas i FORMATCZAS wywołają funkcję formatCzas. Nazwy zmiennych natomiast wielkość liter rozróżniają: $IMIE to inna zmienna niż $imie.

Odpowiedź: b. Wywołania funkcji zadziałają mimo innej wielkości liter, odwołanie do $IMIE już nie.

Pytanie zapasowe: elseif wyklucza kolejne warunki, więc gdy zawodnik zasługuje na dwie uwagi naraz, zostanie tylko pierwsza. Dwa niezależne if sprawdzają oba warunki osobno. Dane testowe, które nie trafiają w drugi przypadek, ukrywają taki błąd.

Odpowiedź: b. Wersja z elseif pokaże jedną uwagę zamiast dwóch.

Druga część godziny pierwszej: skąd bierze się strona w PHP, dlaczego odświeżenie jest nowym żądaniem i skąd skrypt bierze dane od użytkownika.

Strona w PHP powstaje na serwerze: przeglądarka wysyła żądanie, serwer wykonuje skrypt od początku do końca, skrypt oddaje gotowy HTML, a przeglądarka go rysuje. W źródle strony (Ctrl+U) nie ma kodu PHP — jest tylko jego wynik.

Demonstracja: skrypt zwiększa licznik od zera i wypisuje go. Po każdym odświeżeniu wynik to nadal 1, a zegar obok pokazuje, że strona naprawdę powstała na nowo. Zmienna nie przeżywa żądania — przy każdym wejściu skrypt startuje od zera.

Dane od użytkownika przyjeżdżają razem z żądaniem. To, co dopiszesz w adresie po znaku zapytania, ląduje w tablicy $_GET jako pary klucz-wartość. Jest to zwykła tablica, taka sama jak te, na których pracowaliście.

Formularz wysyła dane na dwa sposoby. Metoda GET dokleja je do adresu, więc widać je w pasku i można taki adres wysłać dalej; trafiają do tablicy $_GET. Metoda POST wysyła je w treści żądania, adres zostaje czysty, a dane trafiają do $_POST. Atrybut name pola staje się kluczem w tej tablicy.

Zadanie A: starter zawiera gotową tabelę i dane zawodów. Okrążenie jest rekordem z kluczami czas i kary, gdzie jedna kara dolicza 5 sekund. Plik trzeba nazwać nazwisko_imie_blok3.php.

Etap 1 zadania A: napisać ciała dwóch funkcji. czasZKarami liczy czas okrążenia razem z karami, najlepsze zwraca najkrótszy czas zawodnika, a dla pustej listy null. Jeden zawodnik nie ma żadnego okrążenia i to właśnie jego przypadek wymaga zwrócenia null.

Etap 2 zadania A: w pliku dwa fragmenty kodu są napisane po dwa razy, oba oznaczone komentarzem. Trzeba wyciąć każdy z nich do funkcji srednia i kategoria, samodzielnie decydując, co ma być parametrem. Refactor zmienia kod, a nie wynik: strona po zmianie ma wyglądać identycznie.

Sesja robocza nad zadaniem A. Dla tych, którzy skończą oba etapy: w pliku jest jeszcze jedno, nieoznaczone powtórzenie — fragment robiący to samo, co jedna z gotowych funkcji.

Zadanie B: do kopii pliku dochodzi formularz dodający zawodnikowi okrążenie. Formularz używa metody POST, a skrypt dokłada nowe okrążenie do danych, zanim cokolwiek policzy. Inaczej podsumowanie i licznik nie zobaczą nowego czasu. Zadanie jest bez punktów i robione wspólnie na lekcji.

Dodane przez formularz okrążenie znika po odświeżeniu strony i jest to zachowanie zamierzone: skrypt przy każdym żądaniu startuje od zera, a dane są zapisane w kodzie. Trwałym zapisywaniem danych zajmiemy się w kolejnym bloku. Rozszerzenie: drugi formularz metodą GET, filtrujący tabelę po kategorii.

Oddanie: plik nazwisko_imie_blok3.php (punktowany 0/1/2, dwójka wymaga obu etapów; plik pod inną nazwą dostaje najwyżej 1) i nazwisko_imie_formularz_blok3.php (przeglądany, bez punktów). Grupa 1 wypycha pliki do swojego repozytorium, grupa 2 wysyła na Teams. Przed wysłaniem trzeba odświeżyć stronę i sprawdzić, czy się otwiera.

Koniec bloku.