PHP 8 – najważniejsze informacje o nowej wersji PHP

W ciągu ostatnich lat widzieliśmy już wiele nowych wersji PHP – w końcu omawiany język ma już 26 lat. Co pewien czas pojawiają się jednak przełomowe aktualizacje i do takich można zaliczyć właśnie tę najnowszą, czyli PHP 8. Nowa wersja została opublikowana 26 listopada 2020 roku i skupiła się na wprowadzeniu wielu przydatnych funkcjonalności. Na które warto zwrócić uwagę? Tego dowiesz się w tym artykule.

PHP 8

PHP 8 – lepsza wydajność

Najnowsza wersja to oczywiście poprawki w zakresie wydajności. Jak dokładnie się one prezentują? Zwróćmy uwagę na poniższe testy przeprowadzone przez PHP Benchmarks:

Wydajność PHP

Najważniejsze dwie pozycje z powyższej punktacji w przypadku PHP 8 to:

  • o 2,6% lepszy wynik niż PHP 7.4.
  • o 48% lepszy wynik niż PHP 5.6.

Poprawa jest zauważalna, choć w historii tego języka w przypadku różnych zastosowań zdarzały się i większe przeskoki. Przejdźmy jednak do najważniejszych rzeczy, czyli najnowszych funkcji.

1. JIT – kompilator Just In Time

Język PHP działa w czasie rzeczywistym, a jego kod nie jest kompilowany, lecz konwertowany równolegle z samym wykonywaniem. Przyczynia się to do wolniejszego działania. Kompilator JIT ma to zmienić, działając w pewien sposób jako pomost między dwoma procesami. Kompiluje on i cacheuje niektóre sekcje kodu w czasie jego wykonywania, dzięki czemu wersja skompilowana może być użyta zamiast wersji zinterpretowanej. Nowość ta nie ma jednak dużego znaczenia w przypadku stron internetowych, gdyż powyższy proces przyda się głównie w innych zastosowaniach jak grafika 3D.

2. Unia

Unia polega na określaniu zestawu typów dla danych wejściowych i zwracanych. Do tej pory PHP nie pozwalało domyślnie na ich zastosowanie, więc wdrażano je „na około”, definiując owe typy w adnotacjach. W nowej wersji PHP deklarowanie większej ilości typów unii będzie znacznie prostsze.

3. Constructor Property Promotion

Kolejna nowość ma usprawnić proces programowania obiektowego w PHP. RFC Constructor Property Promotion proponuje nową, bardziej zwięzłą składnię, która uprości deklarację właściwości, czyniąc ją bardziej zwięzłą. Zmiana ta dotyczy tylko konkretnych parametrów, które są poprzedzone słowami kluczowymi public, protected i private.

Do tej pory wszystkie takie właściwości musiały być powtórzone co najmniej cztery razy w kodzie, zanim dało się używać ich z obiektami. Taka składnia nie jest szczególnie użyteczna, zwłaszcza w klasach z dużą liczbą właściwości i bardziej opisowymi nazwami. RFC proponuje dlatego połączenie konstruktora i definicji parametru, dzięki czemu kod jest bardziej czytelny i mniej podatny na błędy.

4. Match Expressions – wyrażenia dopasowania

Kolejny element w ostatniej wersji PHP ma na celu poprawienie składni. Match expressions przypominają dopasowania switch, jednak są pod pewnymi względami jeszcze lepsze:

  • Match bierze pod uwagę przede wszystkim wynik wyrażenia, więc programista nie musi ustawiać odpowiedniej zmiennej w każdym przypadku.
  • Brak koercji typów jak w przypadku dopasowań switch.
  • Domyślne słowo kluczowe break jest umieszczane po każdym ramieniu, więc jeśli zapomnisz o owej przerwie, nie doświadczysz niespodziewanych problemów.

5. Atrybuty v2

Atrybuty, znane również jako adnotacje, są formą ustrukturyzowanych metadanych, które mogą być użyte do określenia właściwości obiektów, elementów lub plików. Do wersji PHP 7.4, doc-comments były jedynym sposobem na dodanie metadanych do deklaracji klas, funkcji itd. Omawiana nowość polega na wprowadzeniu atrybutów do PHP, definiując je jako formę ustrukturyzowanych, składniowych metadanych, które mogą być dodawane do deklaracji klas, właściwości, funkcji, metod, parametrów i stałych.

6. WeakMaps – słabe mapy

WeakMap bazuje na WeakRefs z PHP 7.4. WeakMap przechowuje odwołania do obiektów, które nie blokują owych obiektów od zostania usuniętymi jako elementy bezużyteczne. Omawiana nowość w PHP 8 jest przydatna przykładowo w przypadku mapowania obiektowo-relacyjnego (ORM).

W omawianym procesie często implementowane są cache, które przechowują odwołania do klas podmiotów, aby poprawić wydajność relacji między podmiotami. Nie mogą one zostać usunięte jako elementy bezużyteczne, jeśli pamięć podręczna ma do nich odniesienie, nawet jeśli pamięć jest jedynym czynnikiem, który się do nich odwołuje.

Jeśli caching używa słabych odwołań i map, PHP będzie usuwać te obiekty, gdy nic innego nie będzie się do nich odwoływać. Z tego powodu w przypadku ORM-ów, które są w stanie zarządzać nawet tysiącami podmiotów w ramach jednego żądania, słabe mapy mogą zaoferować lepszy, bardziej przyjazny dla zasobów sposób radzenia sobie z tymi obiektami.

7. Dziedziczenie w przypadku metod prywatnych

Ostatnie wersje PHP stosowały takie same kontrole dziedziczenia dla metod publicznych, chronionych i prywatnych. W efekcie metody prywatne podlegały tym samym regułom sygnatur metod co metody chronione i publiczne. Takie podejście nie ma sensu, gdyż metody prywatne nigdy nie są dostępne dla klas potomnych. Najnowsza wersja wprowadziła zmianę w tym zachowaniu, dzięki czemu te kontrole dziedziczenia nie są już wykonywane na prywatnych metodach. Oprócz tego zastosowanie final private function również nie miało sensu, dlatego wprowadzenie tej funkcji zwróci ostrzeżenie:

Warning: Private methods cannot be final as they are never overridden by other classes.

Ostatnia wersja PHP – ogólne poprawki

Zwracanie wyjątków TypeError oraz ValueError jest już funkcją wbudowaną. Oprócz tego procesy porównywania zmiennych różnych typów oraz weryfikacji typów w przypadku operacji bitowych i arytmetycznych zostały znacznie poprawione. Zmieniono także to, jak działają funkcje array_key_exists() oraz define(). Z kolei funkcje create_function() oraz each() zostały usunięte. Jeśli chodzi o raportowanie błędów, operator @ nie będzie już maskował błędów krytycznych, a domyślną wartością w przypadku takich raportów jest E_ALL.

Nowa wersja PHP – podsumowanie

Można powiedzieć, że celem PHP 8 jest takie uporządkowanie wszystkich elementów odpowiedzialnych za jego działanie, aby były one prostsze i nie wprowadzały zamieszania. Nowe funkcjonalności jak JIT znajdą zapewne ciekawe zastosowanie, choć przyjdzie jeszcze poczekać, zanim zobaczymy ich pełny potencjał.

Chcesz zgłębiać swoją wiedzę?

Czytaj dalej