Typy danych i declare(strict_types=1)
🎯 Po tej lekcji rozpoznasz typy danych w PHP i będziesz dodawać declare(strict_types=1) do każdego nowego pliku.
Kiedy Ola wpisuje swoje imię w formularzu, PHP dostaje tekst. Kiedy podaje wiek — liczbę. Kiedy zaznacza checkbox „chcę newsletter" — wartość tak/nie. PHP musi wiedzieć, z jakim rodzajem danych pracuje — i tu właśnie wchodzą typy.
Typy skalarne w PHP
PHP ma cztery podstawowe (skalarne) typy danych:
| Typ | Co przechowuje | Przykład |
|-----|---------------|---------|
| string | Tekst | 'Ola', "Kraków" |
| int | Liczba całkowita | 25, -10, 0 |
| float | Liczba z częścią ułamkową | 3.14, 19.99 |
| bool | Wartość logiczna: tak lub nie | true, false |
Jest też specjalny typ null, który oznacza „brak wartości":
<?php
declare(strict_types=1);
$imie = 'Ola'; // string
$wiek = 25; // int
$cena = 19.99; // float
$aktywny = true; // bool
$uwagi = null; // null — brak uwag
var_dump($imie); // wynik: string(3) "Ola"
var_dump($wiek); // wynik: int(25)
var_dump($cena); // wynik: float(19.99)
var_dump($aktywny); // wynik: bool(true)
var_dump($uwagi); // wynik: NULL
var_dump pokazuje typ i wartość jednocześnie — dlatego jest tak przydatny w nauce.
Skąd PHP wie, jaki typ?
W PHP nie musisz pisać „to jest int, a to string" — PHP sam rozpoznaje typ na podstawie wartości:
'Ola'w cudzysłowie → string25bez cudzysłowia → int3.14z kropką → floattruelubfalse→ bool
To wygodne, ale może prowadzić do niespodzianek, gdy PHP zaczyna sam konwertować typy. Tu z pomocą przychodzi declare(strict_types=1).
declare(strict_types=1) — dlaczego to ważne?
Bez tej deklaracji PHP chętnie „pomaga" konwertując typy za Ciebie:
<?php
// BEZ strict_types — PHP konwertuje po cichu
function podwoj(int $n): int {
return $n * 2;
}
echo podwoj('5'); // PHP konwertuje '5' na 5 — cicho, bez ostrzeżenia!
Na pierwszy rzut oka to wygląda wygodnie. Ale takie automatyczne konwersje mogą ukrywać błędy przez długi czas — i sprawią, że zamiast wyraźnego błędu program cicho przyjmie stringa i zwróci 10.
Z declare(strict_types=1) PHP zamiast konwertować — zgłosi błąd:
<?php
declare(strict_types=1);
function podwoj(int $n): int {
return $n * 2;
}
echo podwoj(5); // wynik: 10 — OK
echo podwoj('5'); // TypeError: podwoj(): Argument #1 must be of type int, string given
declare(strict_types=1); w pierwszej linii po <?php. Możesz nawet zrobić z tego swój osobisty szablon nowego pliku. Zapobiegasz w ten sposób całej klasie trudnych do znalezienia błędów.Deklaracja musi być pierwsza
declare(strict_types=1) działa tylko wtedy, gdy stoi na samym początku pliku jako pierwsza instrukcja — przed jakimkolwiek innym kodem czy wyjściem (puste linie i tag <?php jej nie przeszkadzają):
<?php
declare(strict_types=1); // ← MUSI być tu, zaraz po <?php
// Teraz możesz pisać resztę kodu
$imie = 'Kuba';
echo $imie; // wynik: Kuba
declare(strict_types=1) gdziekolwiek indziej — w środku pliku lub po pierwszej instrukcji — PHP albo zgłosi błąd, albo je zignoruje. Zawsze na początku!Przegląd na jednym ekranie
<?php
declare(strict_types=1);
// Cztery typy skalarne + null
$nazwa = 'Sklep Kubusia'; // string
$liczbaIzb = 3; // int
$temperatura = -2.5; // float
$czyOtwarty = true; // bool
$notatka = null; // null — brak wartości
var_dump($nazwa); // string(13) "Sklep Kubusia"
var_dump($liczbaIzb); // int(3)
var_dump($temperatura); // float(-2.5)
var_dump($czyOtwarty); // bool(true)
var_dump($notatka); // NULL
W kolejnych lekcjach zobaczysz, jak te typy współpracują z funkcjami i jak PHP pomaga Ci w pisaniu bezpieczniejszego kodu.
Sprawdź się
Jaki typ danych ma wartość true?
true i false to wartości logiczne — ich typ to bool (od angielskiego boolean).
Co oznacza declare(strict_types=1) na początku pliku?
strict_types=1 wyłącza automatyczne konwersje typów (np. stringa na inta). PHP zgłosi błąd zamiast po cichu konwertować.
Jaki typ ma wartość 3.14?
Liczby z częścią dziesiętną (ułamkową) są typu float. Liczby całkowite, np. 3, to int.
Który z poniższych przykładów ma typ null?
null to specjalna wartość oznaczająca brak wartości. 0 to int, '' to pusty string.
Ćwiczenie
Utwórz plik z declare(strict_types=1) i zadeklaruj po jednej zmiennej każdego typu: string, int, float, bool i null. Do każdej zmiennej dodaj komentarz z jej typem. Na końcu wyświetl je wszystkie przez var_dump.
Pokaż rozwiązanie
<?php
declare(strict_types=1);
$imie = 'Ola'; // string
$wiek = 25; // int
$wzrost = 1.68; // float
$aktywny = true; // bool
$pseudonim = null; // null
var_dump($imie);
var_dump($wiek);
var_dump($wzrost);
var_dump($aktywny);
var_dump($pseudonim);