Przegląd najciekawszych funkcjonalności w PHP

Bez kategorii

Hej, w tym artykule skupię się na opisaniu według mnie najciekawszych i najbardziej znaczących funkcjonalnościach jakie weszły do PHP'a na przestrzeni ostatnich lat, głównie od PHP'a 7 do 8.2. Miłej lektury :).

Type declaration (PHP 7.x)

Deklarowanie typów to dla mnie jeden z najważniejszych rzeczy , jaka zmieniła moją pracę z PHP'em o ile lepiej się z niego kozysta. Przede wszystkim poprawiło to czytelność kodu ale i debugowanie.

Readonly properties/classes (PHP 8.1/8.2)

Jedną z niewątpliwie najciekawszych możliwości w PHP'ie na jaką czekałem jest możliwość deklarowania klas (php 8.2) i właściwości obiektu jako tylko do odczytu. Zapewnia to niemutowalność wielu typów bytów takich jak chociażby DTO a ponad to przyśpieszają definiowanie bytów ze względu na mniejszą ilość kodu.

Constructor Promotion

Deklarowanie właściwości klasy poprzez podanie parametrów z słowem-kluczem widoczności jest dla mnie kolejną używaną na codzień i zawdzięczaną rzeczą głównie za poprawę czytelności kodu i jego zmniejszenie.

Null coalescing operator (PHP 7.0)

Jeden z najbardziej przydatnych operatorów dla mnie, dzięki któremu mogę w prostrzy sposób wyrzucać wyjątki w przypadku braku zdefiniowanego indeksu tablicy lub zmiennej lub funkcji zwracającej nieoczkiwanie null'a kiedy to nie powinno być dozwolone.

Attributes known previously as Annotations (PHP 8.0)

Adnotacje od dawna już były domeną bundla doctrine'a, który chwalebnie był używany do opisywania komponentów we frameworkach. Już teraz są wbudowane w trochę innej formie znanej jako atrybuty #[]. Także jest kilka zdefiniowanych wbudowanych atrybutów takich jak:

  • #[ReturnTypeWillChange] (PHP 8.1) - Zachowanie wstecznej kompatybilności od PHP 5 do PHP 8.x odnośnie zwracanego typu, który będzie obligatoryjny od PHP 9.0
  • #[AllowDynamicProperties] (PHP 8.2) - Zezwól na dynamiczne właściwości obiektu.

Multi-Catch Exception Handling

try {
   doSm();
} catch (ExceptionType1 | ExceptionType2) {
   dd('log group 1');
} catch (ExceptionType3 | ExceptionType4) {
   dd('log group 2');
}

Grupowanie typów wyjątków w catch block ułatwia łapanie oczekiwanych wątków w niższych warstwach aplikacji. Więc skraca kod i poprawia czytelność.

First-class Callable Syntax

Może nie jest to super istotna zmiana, ale znacznie poprawia czytelność i sprawia że zachowywanie referencji funkcji w zmiennej wreszcie staje sę proste i intuicyjne.