- PHP 8.0 — kluczowe zmiany
- Union types (np.
int|float)
- Match expression (zwraca wartość, brak
break)
- Named arguments (np.
fn(name: 'Jan'))
- Nullsafe operator
?-> (bezpieczny dostęp do właściwości/metod)
- Constructor property promotion (skrótowy zapis właściwości w konstruktorze)
- JIT (Just-In-Time) — potencjalne przyspieszenie w obliczeniach)
- PHP 8.1 — ważne dodatki
- Enumy (natywne enumeracje oraz
backed enums z wartością)
- Readonly properties (właściwości tylko do odczytu po przypisaniu)
- First-class callables (np.
strlen(...))
- Fibers (lekka współbieżność)
- Intersection types (np.
A&B)
- PHP 8.2 — porządki i nowe możliwości
- Readonly classes (wszystkie właściwości klasy readonly)
- DNF types / złożone kombinacje typów (np.
(A&B)|null)
- Deprecation dynamicznych właściwości (wymagaj deklaracji lub
#[AllowDynamicProperties])
- Nowe helpery:
json_validate(), mb_str_pad()
- PHP 8.3 — udoskonalenia
- Typed class constants (stałe klas z typami)
- Poprawki JIT i reflection (lepsze wsparcie dla enumów i atrybutów)
- Deep clone dla readonly/clone oraz drobne ulepszenia match
- Przydatne funkcje i helpery
str_contains(), str_starts_with(), str_ends_with()
array_is_list(), array_key_first(), array_key_last()
get_debug_type() — lepsze niż gettype()
- Zmiany w zachowaniu
- Bardziej rygorystyczne porównania luźne (
0 == 'foobar' zwraca false w PHP 8)
- Więcej przypadków zgłaszających
TypeError zamiast cichego rzutowania
- Operator
@ mniej zalecany — ukrywa błędy i spowalnia
- Deprecations / do unikania
- Dynamiczne właściwości bez deklaracji
- Stare funkcje/aliasy (np.
create_function(), each())
- Funkcje związane z przestarzałym przetwarzaniem UTF-8 planowane do usunięcia
- Praktyczne wskazówki migracyjne
- Uruchom statyczną analizę (PHPStan/Psalm) po dodaniu typów
- Wykonaj testy jednostkowe i integracyjne (sprawdź zachowanie porównań i typów)
- Zamień stałe stringowe na enumy tam, gdzie reprezentujesz skończony zbiór wartości
- Zastąp dynamiczne właściwości jawnie zadeklarowanymi lub dodaj
#[AllowDynamicProperties] tymczasowo
- Sprawdź i zaktualizuj biblioteki (Composer) — wiele rozszerzeń korzysta z nowych typów
- Szybkie przykłady (do wklejenia)
- Enum:
enum Status: string { case Draft = 'draft'; case Published = 'published'; }
- Match:
$result = match($code) { 200 => 'OK', 404 => 'Not found', default => 'Unknown' };
- Nullsafe:
$name = $user?->profile?->name;
- Co warto używać
- Types (return + params), enumy, readonly dla DTO/VO, named args dla czytelności
- PHPStan/Psalm + CI, testy, i aktualny Composer
💼 Szukam pracy jako
programista PHP
LinkedIn