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.