INF.03 · Aplikacje internetowe PHP
Zmienne i typy danych w PHP
Zmienna ma wartość i typ.
- PHP8.3
- mysqli · MariaDB
- Praktyka i diagnoza
Po tej lekcji: Dobierzesz typ danych oraz obliczysz kwotę bez błędów typowych dla cen zapisanych jako float.
Zrozum mechanizm
Zmienna zaczyna się od $, np. $liczbaBiletow. = przypisuje wartość; === porównuje wartość i typ; == może wykonywać konwersję typów. Rozróżniaj int, float, string, bool, null i array. PHP ma typy dynamiczne: typ dotyczy wartości i może się zmienić po przypisaniu. var_dump() pokazuje typ i wartość — używaj go lokalnie do diagnozy, nie do wypisywania haseł.
Arytmetyka: + - * /, % reszta z dzielenia, ** potęga; . skleja tekst. Nawiasy wyrażają kolejność działań. Podwójny cudzysłów interpoluje proste zmienne, pojedynczy zachowuje ich zapis. ?? dostarcza wartość dla braku lub null. Kwoty przechowuj jako całkowite grosze. Float jest przybliżeniem i nie jest dobrym podstawowym zapisem pieniędzy.
Jak uruchamiać krótkie przykłady?
Każdy krótki przykład oznaczony własnym plikiem uruchamiaj osobno, nie doklejaj wszystkich definicji do jednego pliku. W edytorze zapisz go jako .php, a w terminalu tego folderu wpisz np. php for.php. Wtedy pokazane końce wierszy PHP_EOL są widoczne. W odpowiedzi HTML znak końca wiersza sam nie robi nowej linii na ekranie: użyj <br> albo znacznika <pre>. Wyświetl źródło pozwala zobaczyć tekst odpowiedzi.
Przykłady opisane jako fragment projektu wymagają paczki KINO / LAB i wcześniejszej konfiguracji. Nie uruchamiaj ich jako samodzielnych endpointów. Pełny plik niżej pokazuje kontekst. Funkcje h(), pole() i wymagajPost() są nasze; ich definicje wczytuje bootstrap.php.
Zmienna i typ: co właściwie zapisujesz?
Nazwa zmiennej zaczyna się od dolara, dalej jest litera lub podkreślenie, potem mogą być cyfry. Wielkość liter ma znaczenie: $wiek i $Wiek to różne nazwy. Nie pisz typu przed nazwą przy zwykłym przypisaniu.
Podstawowa forma: $nazwa = wartość;
<?php
$wiek = 16; // int
$cena = 12.99; // float
$tytul = 'Kosmos'; // string
$dostepny = true; // bool
$brak = null; // brak wartości
$filmy = ['Kosmos']; // array
echo gettype($wiek) . PHP_EOL;
echo "Film: $tytul" . PHP_EOL;
echo 'Film: $tytul';
integer Film: Kosmos Film: $tytul
-
intoznacza pełną liczbę;floatprzybliżoną liczbę z częścią ułamkową (kropka w kodzie). -
stringto tekst,boolto true lub false,nullcelowy brak wartości, a array przechowuje wiele elementów. -
gettype($wiek)zwraca nazwę typu.var_dump($wiek)dodatkowo pokazuje wartość; używaj lokalnie. - Podwójny cudzysłów podstawia
$tytul; pojedynczy w tym przykładzie zachowuje zapis$tytul.
Działanie, przypisanie i porównanie
Nie każdy znak między wartościami służy do liczenia. Najpierw odróżnij = od ===, a kropkę od plusa.
Podstawowa forma: wynik = lewa_strona operator prawa_strona (w PHP nazwę wyniku poprzedź $)
<?php
$a = 7;
$b = 2;
echo ($a + $b) . PHP_EOL;
echo ($a / $b) . PHP_EOL;
echo ($a % $b) . PHP_EOL;
echo ($a ** $b) . PHP_EOL;
echo ('7' === 7 ? 'tak' : 'nie');
9 3.5 1 49 nie
-
+,-,*,/dodają, odejmują, mnożą i dzielą.%daje resztę: 7 = 3·2 + 1. -
**to dwie gwiazdki: 7 do potęgi 2 daje 49.^nie jest potęgowaniem w PHP. -
=przypisuje,===porównuje wartość i typ. Napis "7" i liczba 7 nie są identyczne. -
warunek ? wynik_gdy_prawda : wynik_gdy_fałszto krótkie wyrażenie warunkowe, tutaj wybiera tekst tak/nie.
Funkcje tekstowe i obiekt daty: co znaczą argumenty?
Nazwa funkcji to dopiero początek. W nawiasach podajesz dane w określonej kolejności, a metoda obiektu korzysta też ze stanu tego obiektu.
Podstawowa forma: trim(tekst), mb_strtoupper(tekst, kodowanie), obiektDaty->format(wzor)
<?php
$tekst = ' Kino szkolne ';
echo trim($tekst) . PHP_EOL;
echo mb_strtoupper('Podróż', 'UTF-8') . PHP_EOL;
$seans = new DateTimeImmutable('2026-10-27 16:00', new DateTimeZone('Europe/Warsaw'));
echo $seans->format('d.m.Y H:i') . PHP_EOL;
echo $seans->modify('+1 day')->format('Y-m-d');
Kino szkolne PODRÓŻ 27.10.2026 16:00 2026-10-28
- trim oddaje tekst bez białych znaków na brzegach. mb_strtoupper zamienia litery na wielkie z uwzględnieniem UTF-8; wymaga rozszerzenia mbstring.
- new DateTimeImmutable tworzy obiekt daty. Pierwszy argument to data i czas, drugi obiekt strefy; DateTimeZone określa Europe/Warsaw.
- format odczytuje wzór: d dzień, m miesiąc, Y pełny rok, H godzina, i minuty. M to nie to samo co m — wielkość liter ma znaczenie.
- modify("+1 day") zwraca nowy obiekt przesunięty o dzień. Strzałki można łączyć: najpierw modify, potem format. Oryginalny seans nie został zmieniony.
Jak czytać pozostałe zapisy w pełnym przykładzie
| Zapis | Znaczenie | Przykład użycia |
|---|---|---|
===, !==, &&, ||, ! | Identyczne, nieidentyczne, i, lub, zaprzeczenie. Porównanie ścisłe obejmuje typ; &&/|| nie sprawdzają drugiej części, gdy wynik jest już rozstrzygnięty. | $rok === false || $rok < 1888 |
-> oraz :: | -> wybiera właściwość lub metodę obiektu; :: odnosi się do elementu statycznego klasy. To nie jest zapis dostępu do tablicy. | $zapytanie->execute(); |
Sprawdź w działaniu
Zmienna ma wartość i typ — sprawdź w modelu
Model w przeglądarce wyjaśnia mechanizm na fikcyjnych danych. Nie wykonuje PHP ani zapytań SQL i nie tworzy kont. Prawdziwe skrypty uruchomisz lokalnie z paczki.
Przewidź rezultat, wykonaj próbę i wyjaśnij, która decyzja po stronie serwera decyduje o wyniku.
Uruchom krok po kroku
Otwórz podstawy/02-zmienne.php. Zmieniaj po jednej wartości i przewiduj wynik. Porównaj 5 === "5" oraz 5 == "5". Oblicz 3*1299 groszy, dopiero przy prezentacji podziel na 100 i sformatuj do dwóch miejsc. Nie zastępuj haseł, tokenów ani rzeczywistych danych uczniów danymi do debugowania.
Plik wzorcowy: public/podstawy/02-zmienne.php
<?php
$imie = 'Ola';
$liczbaBiletow = 3; // int
$cenaGrosze = 1299; // int, dokładna kwota w groszach
$sredniaOcena = 4.5; // float
$maZnizke = true; // bool
$brakWyboru = null;
echo "$imie kupuje $liczbaBiletow bilety.\n";
echo 'Zapis $imie bez podstawienia.'."\n";
echo 'Suma groszy: '.($liczbaBiletow * $cenaGrosze)."\n";
var_dump(5 === '5'); // false: inny typ
Wbudowane funkcje tekstu i dat
Trim usuwa zewnętrzne spacje, mb_strlen liczy znaki, a mb_strtoupper zmienia wielkość liter z obsługą UTF-8. Nie używaj trim do hasła. Number_format służy do prezentacji kwoty; nie zmienia zasady przechowywania ceny jako groszy. DateTimeImmutable pozwala jawnie określić strefę i tworzy nową datę po modify zamiast zmieniać poprzednią. Data pochodząca od użytkownika wymaga osobnej kontroli formatu i poprawności.
Próba tekstu i daty
<?php
$tekst = ' Kino szkolne ';
echo trim($tekst) . "\n";
echo mb_strtoupper('Podróż', 'UTF-8') . "\n";
$seans = new DateTimeImmutable('2026-10-27 16:00', new DateTimeZone('Europe/Warsaw'));
echo $seans->format('d.m.Y H:i') . "\n";
echo $seans->modify('+1 day')->format('Y-m-d');
Pobierz i odtwórz projekt
W „Źródłach i materiałach” na końcu pobierz KINO / LAB.zip. Rozpakuj całość; instrukcja START.txt opisuje konfigurację. Pierwsze 6 przykładów w public/podstawy działa bez bazy. Dalsze wymagają lokalnej MariaDB 11.4, importu schema.sql i lokalnego konta bazy z minimalnymi prawami. Gotowa paczka pokazuje całość, ale w tej lekcji wykonaj opisane kroki i własne zadanie.
Ćwiczenie z pomocą · samodzielna praca
Twoja próba — podpowiedzi otwieraj po kolei
Oblicz koszt 4 biletów po 1599 groszy. Wypisz typ liczby biletów i wynik porównania liczby 4 z napisem"4" przez ===.
6396 groszy, int i false.
? Potrzebujesz pomocy? Rozwiązuj krok po kroku.
Krok 1 — pokaż podpowiedź
Odszukaj wskazany plik i zapisz przewidywany rezultat przed zmianą.
Krok 2 — pokaż podpowiedź
Zmień jedną rzecz. Sprawdź metodę żądania, dane i odpowiedź lub wynik programu.
Krok 3 — pokaż podpowiedź
Wykonaj próbę graniczną lub błędną. Porównaj także stan bazy lub sesji, nie tylko komunikat.
Otwórz tylko tyle podpowiedzi, ile potrzebujesz. Po każdym kroku wróć do zadania i sprawdź wynik.
Podsumowanie
Co warto zapamiętać
- Dobierzesz typ danych oraz obliczysz kwotę bez błędów typowych dla cen zapisanych jako float.
- Potrafisz wskazać w kodzie przyczynę wyniku i zaplanować próbę błędnych danych.
- Nie oddajesz haseł, pliku config.local.php ani wartości cookie.
Dalej na swoim koncie
Rozgrzewki, quiz i zadania są w biurku ucznia.
Teoria jest otwarta dla wszystkich. Żeby rozwiązywać zadania, zapisywać szkice i widzieć swój postęp, zaloguj się.
Zaloguj się →