strict_types w PHP – jak działa i dlaczego ma znaczenie

strict_types w PHP

Domyślnie PHP stosuje tzw. „type juggling”, czyli automatyczne dopasowywanie typów danych. Oznacza to, że interpreter PHP stara się „zgadnąć”, jakiego typu wartość masz na myśli, i konwertuje ją w locie, bez błędu i bez ostrzeżenia.

Na przykład jeśli funkcja lub operator oczekuje liczby, a dostanie tekst zawierający cyfrę (np. "5"), PHP potraktuje ten tekst jak liczbę i sam dokona konwersji. Podobnie, jeśli spróbujesz połączyć liczbę z tekstem, PHP spróbuje automatycznie dobrać odpowiedni typ, w zależności od kontekstu operacji.

function add(int $a, int $b): int {
    return $a + $b;
}

echo add("5", 3); // Works, result: 8

Takie zachowanie może prowadzić do trudnych do wykrycia błędów, ponieważ program czasami działa inaczej, niż się spodziewasz, zwłaszcza gdy dane pochodzą z zewnętrznych źródeł (np. formularzy, plików, API).

Właśnie dlatego w bardziej złożonych projektach włącza się strict_types, aby PHP przestał samodzielnie konwertować typy i wymagał dokładnego dopasowania danych do deklaracji funkcji. W przypadku aktywnego strict_types argumenty muszą mieć dokładnie taki typ, jaki został zadeklarowany:

declare(strict_types=1);

function add(int $a, int $b): int {
    return $a + $b;
}

echo add("5", 3); // Fatal error: Argument #1 ($a) must be of type int, string given

Teraz PHP zgłosi błąd, bo "5" to string, nie int.