Blok 2
Wasze strony z bloku 1
Section titled “Wasze strony z bloku 1”Podsumowanie diagnostyki z bloku 1 na 22 pracach: sekcjonowanie semantyczne (header/main/footer) miało 10 prac, mailto: 2, blockquote 3, tabela albo lista definicyjna na pary klucz–wartość 0, opisowy alt 1. Najczęstszy problem to kolejność nagłówków. CSS był w obu grupach mocniejszy niż HTML.
Semantyka w pięć minut
Section titled “Semantyka w pięć minut”Trzy rzeczy do zapamiętania po diagnostyce. Nagłówki tworzą konspekt dokumentu i idą po kolei (h1, potem h2, potem h3), nie według rozmiaru liter. Znacznik opisuje, czym coś jest: cytat to blockquote, adres mailowy to link z mailto:, pary klucz–wartość to lista definicyjna dl albo tabela. Tabela ma anatomię: caption (tytuł), thead (nagłówek), tbody (dane), tfoot (podsumowanie), a komórka nagłówka kolumny to th scope="col". Pełna ściąga tagów jest w sekcji Materiały.
Na otwarciu bloku krótki quiz z materiału z poprzedniego tygodnia: kod na slajdzie, każdy pisze u siebie odpowiedź, potem odsłona.
1. Co wypisze?
Section titled “1. Co wypisze?”Pytanie 1: echo imie; bez znaku dolara. PHP szuka stałej o nazwie imie, a takiej nie ma, więc zamiast napisu leci błąd. Zmienna zawsze ma $.
1. Co wypisze?
Section titled “1. Co wypisze?”Odpowiedź: c. Bez $ PHP traktuje imie jako stałą, nie zmienną, i zgłasza błąd.
2. Co wypisze?
Section titled “2. Co wypisze?”Pytanie 2: if ($ocena = 5) z jednym znakiem równości. To nie porównanie, tylko przypisanie: $ocena dostaje 5, a warunek jest zawsze prawdziwy. Porównanie to ==.
2. Co wypisze?
Section titled “2. Co wypisze?”Odpowiedź: b. Przypisanie w warunku zwraca przypisaną wartość, a 5 jest prawdą, więc gałąź wykonuje się zawsze.
3. Co jest nie tak?
Section titled “3. Co jest nie tak?”Pytanie 3: brak średnika po $a = 5. PHP zgłasza błąd składni w linii 2, choć błąd jest w linii 1 — numer linii w komunikacie to miejsce, w którym PHP zauważył problem, nie zawsze miejsce, gdzie on jest.
3. Co jest nie tak?
Section titled “3. Co jest nie tak?”Odpowiedź: b.
4. Co wypisze?
Section titled “4. Co wypisze?”Pytanie 4: napis w pojedynczych cudzysłowach jest brany dosłownie, zmienne nie są podstawiane. Wypisze Cześć $imie. Podstawianie działa tylko w podwójnych cudzysłowach.
4. Co wypisze?
Section titled “4. Co wypisze?”Odpowiedź: b.
5. Co wypisze?
Section titled “5. Co wypisze?”Pytanie 5: + zamiast .. W PHP plus zawsze liczy, a napis „Wynik: “ nie jest liczbą, więc leci błąd typu. Sklejanie napisów to kropka: "Wynik: " . $wynik.
5. Co wypisze?
Section titled “5. Co wypisze?”Odpowiedź: c.
6. Ile razy wykona się pętla?
Section titled “6. Ile razy wykona się pętla?”Pytanie 6: pętla od 0 do 10 włącznie wykona się 11 razy. Żeby wykonać dokładnie 10, start od 1 albo warunek < 10.
6. Ile razy?
Section titled “6. Ile razy?”Odpowiedź: c.
7. Co wypisze?
Section titled “7. Co wypisze?”Pytanie 7: w foreach ($tablica as $klucz => $wartosc) lewa strona strzałki to klucz, prawa to wartość, niezależnie od nazw. Tu $indeks dostaje wartości, więc wypisze 534. Nazwy zmiennych są dla czytającego, nie dla PHP.
7. Co wypisze?
Section titled “7. Co wypisze?”Odpowiedź: b.
8. Co jest nie tak?
Section titled “8. Co jest nie tak?”Pytanie 8: drabinka if/elseif sprawdza warunki po kolei i wchodzi do pierwszego spełnionego. Średnia 5.0 spełnia już >= 3.0, więc gałąź wyróżnienie jest martwa. Warunki w drabince idą od najostrzejszego do najłagodniejszego.
8. Co jest nie tak?
Section titled “8. Co jest nie tak?”Odpowiedź: b.
9. Co wypisze?
Section titled “9. Co wypisze?”Pytanie 9: literówka w nazwie zmiennej ($sum zamiast $suma). PHP nie zatrzymuje się, tylko wypisuje pusty napis i ostrzeżenie o niezdefiniowanej zmiennej. Ostrzeżenia się czyta, nie ignoruje.
9. Co wypisze?
Section titled “9. Co wypisze?”Odpowiedź: b.
10. Co się stanie?
Section titled “10. Co się stanie?”Pytanie 10: dzielenie przez count([]), czyli przez zero. W PHP 8 to błąd DivisionByZeroError, który zatrzymuje cały skrypt — nie ostrzeżenie. Przed dzieleniem przez liczbę elementów sprawdza się, czy tablica nie jest pusta.
10. Co się stanie?
Section titled “10. Co się stanie?”Odpowiedź: d.
Zadanie: wyniki zawodów biegowych
Section titled “Zadanie: wyniki zawodów biegowych”Zadanie bloku 2: wyniki zawodów biegowych. Starter (pobierz bieg-starter.zip) ma gotową tablicę zawodników z czasami okrążeń w sekundach i szkielet tabeli HTML; do napisania jest pętla wypełniająca wiersze (czasy w formacie m:ss, najlepsze okrążenie, średnie, kategoria, uwagi, klasa CSS od kategorii) i podsumowanie w tfoot. Plik nazywa się nazwisko_imie_blok2.php (małe litery, bez polskich znaków); nazwa jest częścią zadania, plik pod inną nazwą dostaje najwyżej 1. Jeden z zawodników nie ma ani jednego ukończonego okrążenia — trzeba to obsłużyć, inaczej skrypt pada. Pełna treść w sekcji Zadania.
Sesja robocza I
Section titled “Sesja robocza I”Godzina samodzielnej pracy nad zadaniem. Pytania o to, dlaczego coś zostało zrobione tak, a nie inaczej, padają w trakcie pracy — to jest obrona z Zasad.
Ile razy to napisałeś?
Section titled “Ile razy to napisałeś?”Ta sama linijka formatująca czas pojawia się w rozwiązaniu cztery razy: przy liście okrążeń, przy najlepszym, przy średnim i przy najlepszym okrążeniu zawodów. Zmiana formatu oznacza poprawianie w czterech miejscach i przeoczenie jednego. To problem, który rozwiązują funkcje.
Funkcja
Section titled “Funkcja”Funkcja to nazwany kawałek kodu z parametrami i wynikiem. function nazwa($parametr) { ... return wynik; } definiuje ją, nazwa(wartość) wywołuje. return oddaje wynik i kończy działanie funkcji. Funkcje wbudowane (min, count, implode, floor, str_pad) działają dokładnie tak samo, tylko napisał je ktoś inny. Wewnątrz funkcji widoczne są tylko jej parametry i zmienne w niej utworzone, nie zmienne z zewnątrz.
Funkcja może zwrócić „nic”
Section titled “Funkcja może zwrócić „nic””return może wystąpić kilka razy: pierwszy napotkany kończy funkcję. null to sposób na powiedzenie „nie ma wyniku”, np. gdy tablica jest pusta; miejsce wywołania sprawdza to przez === null.
Refactor na żywo
Section titled “Refactor na żywo”Refactor to zmiana kodu bez zmiany wyniku. Kolejność: najpierw to, co jest skopiowane najwięcej razy (formatowanie czasu), potem logika z haczykiem (najlepsze okrążenie, średnie), potem drabinka kategorii. Po każdym kroku strona wygląda identycznie.
Sesja robocza II
Section titled “Sesja robocza II”Druga sesja robocza: kopia pliku jako nazwisko_imie_funkcje_blok2.php i przepisanie własnego rozwiązania na funkcje w tej kopii, plik z pierwszej sesji zostaje bez zmian. Minimum to formatujCzas i jedna własna funkcja więcej. Rozszerzenia: funkcja zwracająca tablicę (uwagi) i parametr z wartością domyślną.
Oddanie
Section titled “Oddanie”Oddanie: dwa pliki, nazwisko_imie_blok2.php (wersja z pierwszej sesji, punktowana 0/1/2; plik pod inną nazwą dostaje najwyżej 1) i nazwisko_imie_funkcje_blok2.php (wersja po refactorze, przeglądana, bez punktów). Grupa 1 wypycha oba do swojego repozytorium, grupa 2 wysyła na Teams. Na otwarciu następnego bloku quiz obejmie funkcje.
Wolna końcówka
Section titled “Wolna końcówka”Koniec bloku.