Przejdź do treści
Podobają Ci się nasze treści?
Sięgnij po unikalną wiedzę prosto od developerów i marketingowców. Zapisz się do newslettera.
CAPTCHA
Dziękujemy za zapisanie się do newslettera!
Aby otrzymywać najświeższe, branżowe informacje, potwierdź subskrypcję w mailu, który od nas dostałeś.
PS. Nawet tak ważne wiadomości lubią czasem pomylić folder, dlatego upewnij się, że mail nie trafił do SPAMU
Otwórz swoją skrzynkę e-mail

PHP 8 – najważniejsze informacje o nowej wersji PHP

Kategoria: 
Data aktualizacji: 
Czas czytania
: 6 min

PHP, czyli najpowszechniej używany język server-side, ma już 30 lat. Przez ten czas doczekaliśmy się całej serii jego iteracji; ostatnia, PHP 8, została opublikowana 28 listopada 2020 roku i wniosła do środowiska języka sporo nowości. Jak wpłynęły one na wydajność pisanych w PHP skryptów? Które z nich są najważniejsze? Tego dowiesz się w poniższym tekście.

PHP 8

Najważniejsze nowości w PHP 8

Przyjrzyjmy się najistotniejszym nowościom, które wprowadzono w PHP 8.

  1. Lepsza wydajność

    Ostatnia wersja to przede wszystkim poprawki w zakresie wydajności. Jak dokładnie się prezentują? Zwróć 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 zdarzały się nawet większe przeskoki.

    Co stoi za tymi wynikami? Wzrost wydajności w najnowszej wersji PHP to w dużej mierze zasługa świeżo wprowadzonego kompilatora JIT, a także mechanizmu WeakMaps, który mocno usprawnia czyszczenie pamięci cache ze zbędnych obiektów. Ale to oczywiście nie wszystko.

  2. JIT – kompilator Just In Time

    Przed wprowadzeniem ósmej wersji PHP był w stu procentach językiem interpretowanym; kod był konwertowany w czasie wykonywania, bez wcześniejszej kompilacji.

    Kompilator JIT (Just-In-Time) to zmienił i wprowadził do PHP możliwość kompilacji niektórych sekcji kodu bezpośrednio przed ich wykonaniem. Taka procedura pozwala wykonywać programy szybciej niż przy pomocy typowego interpretera, co ma znaczenie szczególnie przy zadaniach wymagających większej mocy obliczeniowej.

    O ile w przypadku prostych, statycznych stron internetowych efekty procesu JIT nie będą duże, tak przy przetwarzaniu danych w dynamicznych aplikacjach webowych albo przy obsłudze grafiki 3D wzrost wydajności kodu jest faktycznie widoczny. Tym bardziej że sam kompilator został jeszcze lepiej zoptymalizowany wraz z wersją PHP 8.4.

  3. 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 jest znacznie prostsze, co przekłada się na lepszą czytelność kodu. A to z kolei oznacza mniejsze ryzyko pojawienia się błędów.

    Sporą nowością było też wprowadzenie – w wersji PHP 8.2 – nowej postaci formuł, Disjunctive Normal Form, która pozwala bezpośrednio łączyć ze sobą typy unii oraz przecięć (tzw. intesection types) w wyrażeniach.

  4. Constructor Property Promotion

    Kolejna nowość usprawnia proces programowania obiektowego w PHP. RFC Constructor Property Promotion proponuje nową składnię upraszczającą deklarację właściwości, czyniąc ją zwięźlejszą. Zmiana 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 połączenie konstruktora i definicji parametru, dzięki czemu kod jest czytelniejszy i mniej podatny na błędy.

  5. Match Expressions – wyrażenia dopasowania

    Match Expressions, podobnie jak switch, służą do dopasowywania wartości, ale oferują też kilka istotnych ulepszeń:

    • porównują wartości ściśle, bez koercji typów;
    • zwracają wynik wyrażenia, więc nie musisz samodzielnie przypisywać wartości do zmiennych;
    • każda gałąź jest automatycznie zakończona, więc nie trzeba pamiętać o break.

    Match expressions są zwięzłe i poprawiają czytelność oraz bezpieczeństwo kodu.

  6. 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. Teraz możesz to zrobić przy użyciu atrybutów. To nie tylko zwiększa przejrzystość kodu, ale pozwala frameworkom efektywniej interpretować strukturę aplikacji.

  7. WeakMaps – słabe mapy

    WeakMap bazuje na WeakRefs z PHP 7.4. Przechowuje referencje do obiektów i nie blokuje ich przed usunięciem przez garbage collector.

    To świetne rozwiązanie dla ORM-ów, które tworzą cache dla ogromnej liczby obiektów. Standardowe mapy powodują, że obiekty pozostają w pamięci, nawet jeśli nikt ich nie używa. Z WeakMap jest inaczej – jeśli mapa trzyma odniesienie, obiekt może zostać usunięty.

  8. Dziedziczenie w przypadku metod prywatnych

    W poprzednich wersjach PHP kontrola dziedziczenia obejmowała wszystkie metody, niezależnie od ich widoczności. Problem w tym, że metody prywatne nie są dziedziczone, więc sprawdzanie zgodności ich sygnatur nie miało sensu.

    W najnowszej wersji PHP zmieniono tę zasadę – prywatne metody nie podlegają już kontroli dziedziczenia, co upraszcza kod i eliminuje zbędne ostrzeżenia. Wprowadzono również zmianę dotyczącą słowa kluczowego final. PHP zwraca teraz ostrzeżenie, gdy spróbujesz oznaczyć metodę prywatną jako final:

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

PHP 8 - najistotniejsze nowości

Aktualizacje PHP 8

Od wprowadzenia wersji z numerem 8 minęło już kilka lat, więc siłą rzeczy po drodze musiało pojawić się kilka istotnych aktualizacji. Przejdźmy przez nie po kolei, od wersji 8.0.

  • PHP 8.0 – najnowsza główna wersja PHP od początku mogła się pochwalić przede wszystkim dodaniem kompilatora JIT oraz typów unii – czyli dwoma zmianami, które w zasadzie zdefiniowały całą ósmą iterację PHP. Wprowadzono również nowy, elastyczniejszy sposób przekazywania parametrów do funkcji i metod, czyli tzw. argumenty nazywane, a także match expressions, jako alternatywę dla wyrażeń switch;
  • PHP 8.1 – w pierwszej z większych aktualizacji dodano m.in. obsługę tzw. lekkich wątków (Fibers), które mogą być przetwarzane równolegle, bez blokowania głównego procesu. Wprowadzono również modyfikator readonly, służący do deklarowania właściwości jako „tylko do odczytu”. Takie pola nie mogą być modyfikowane po pierwszym przypisaniu wartości, co naturalnie zwiększa bezpieczeństwo kodu;
  • PHP 8.2 – w tej aktualizacji najważniejszą zmianą było wprowadzenie wspomnianej już możliwości łączenia typów unii oraz przecięć przy pomocy Disjunctive Normal Forms. Oprócz tego usunięto dynamiczne właściwości w klasach, co ograniczyło ryzyko nieumyślnego dodawania nowych pól do obiektów; z kolei modyfikator readonly został rozszerzony na poziom klas, dzięki czemu od tej pory można definiować całe klasy jako „tylko do odczytu”;
  • PHP 8.3 – w kolejnej wersji rozszerzono m.in. funkcję json_validate(), umożliwiając tym samym szybszą walidację danych w formacie JSON bez konieczności ich dekodowania. Dodano również funkcję array_is_list(), która pozwala sprawdzić, czy dana tablica jest listą indeksowaną liczbowo, co upraszcza operacje na strukturach danych;
  • PHP 8.4 – najnowsza wersja przyniosła pierwsze większe zmiany, jeśli chodzi o działanie kompilatora JIT; został on lepiej zoptymalizowany pod kątem zadań związanych np. z uczeniem maszynowym. Oprócz tego w środowisku PHP wreszcie pojawiły się property hooks (haki własności), które pozwalają wprowadzać zachowania w sposób specyficzny dla danego pola, ale z zachowaniem innych aspektów języka; dodano także możliwość definiowania różnych poziomów dostępu dla odczytu i zapisu właściwości klas, w celu zwiększenia kontroli nad bezpieczeństwem kodu.

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 funkcje, takie jak kompilator JIT, już znalazły sporo ciekawych zastosowań (np. przy machine learningu), choć przyjdzie nam jeszcze poczekać, zanim zobaczymy ich pełny potencjał.

Nie powinniśmy za to czekać zbyt długo na kolejną, dziewiątą już wersję główną PHP. Wiele wskazuje na to, że nadchodząca aktualizacja 8.5 (planowana na listopad 2025, wg PHP.Watch oraz The PHP Foundation) może być ostatnią dużą wersją przed wydaniem PHP 9.

Oceń wpis
4.8
Ocena: 4.8 Liczba głosów: 26

Dziękujemy za ocenę postu!

Mamy więcej darmowych treści. Nie rezygnuj z nich!
Technologie, SEO, marketing - newsletter z poradami, które od razu możesz wdrożyć! Prosto na Twoją skrzynkę. Za darmo i bez spam
CAPTCHA