PHP 8.2 – co nowego? Test wydajności

PHP 8.2

Jakkolwiek PHP 8.2 znajduje się obecnie w wersji beta, a do pełnego wydania będzie trzeba poczekać do 24 listopada 2022 roku, to już teraz częściowo wiadomo, jakich można się spodziewać aktualizacji.

Jakie zmiany zaszły w PHP 8.2 i czego należy się spodziewać?

I o ile poprzednia odsłona, omówiona tutaj, wprowadzała kilka ciekawych opcji. O tyle PHP 8.2 miejscami mocno do niej nawiązuje, modyfikując lub optymalizując uprzednio dodane funkcjonalności.

O tym oraz zaimplementowanych udogodnieniach, wycofaniach, przeprowadzonych korektach tudzież parametrach skupiających się wokół nowej odsłony PHP 8.2 i jej wydajności dowiesz się z tego artykułu.

Wydajność PHP 8.2 vs. 8.1 vs. 7.4 vs. 5.6

Jako że grupa developerów pracująca nad ewolucją języka PHP zdążyła już przyzwyczaić użytkowników końcowych do cyklicznego podbijania wskaźników efektywności, nie odstępuje od tego trendu i tym razem.

Co można zaobserwować na poniższym zestawieniu odznaczającym wydajność poszczególnych wersji – w danym ujęciu: PHP 8.2, 8.1, 7.4 i 5.6:

Jak prezentuje się wydajność nowej wersji PHP 8.2?

Test został przeprowadzony na serwerze AMD Ryzen 9 5950X przez zespół Phoronix.com i dotyczy ogólnego rezultatu benchmark PHPBench.

Można z niego wywnioskować, że wynik benchmark dla PHP 8.2 (w opcji dev) jest o:

  • 2% wyższy od PHP 8.1.6;
  • 43% wyższy od 7.4.22;
  • 223% wyższy od PHP 5.6.40.

Oczywiście w porównaniu z wydaniem PHP 8.1 nie uwydatnia się tutaj zauważalna różnica, jednakże warto pamiętać, że do oficjalnego wypuszczenia nowej odsłony została jeszcze okazała chwila. A trend przeważnie jest wzrostowy.

Warto wiedzieć: Mimo iż celem każdej tego typu aktualizacji jest optymalizacja zasobów oraz zwiększenie wydajności należy mieć na uwadze, że niekoniecznie system plików strony musi być z góry na dane zmiany gotowy.
W takiej sytuacji warto zostać przy starszej, acz współpracującej z całą infrastrukturą witryny wersji.

Sprawdź najszybszy na rynku hosting WordPress oraz hosting Ecommerce z PHP 8.2.

Co nowego w PHP 8.2

O ile wydanie PHP 8.2 nie jest orędownikiem rewolucji, o tyle w pewnych miejscach może udać mu się namieszać, podczas gdy inne przestrzenie – wręcz przeciwnie – całkiem lepiej zorganizuje.

Co nowego w PHP 8.2?

I aby się o tym przekonać warto zerknąć na spis wszystkich dodanych aktualizacji, jako że takowy bilans został uwzględniony tutaj.

Oto co nowego w PHP 8.2:

Standalone Types (typy samodzielne)

O ile wydanie PHP 8.0 wprowadziło tzw. Union Types umożliwiające łączenie typów, o tyle poniższa opcja:

function alwaysTrue(): true
{
 return true;
}  

Dopuszcza zwrócenie ich separatywnie. A dokładniej tych oznaczonych jako: true, false i null. Modyfikacja ta ma pozwolić na precyzyjne deklarowanie typów, właściwości bądź parametrów.

Readonly classes (klasy tylko do odczytu)

Innym odwołaniem do wcześniejszych implementacji jest dodanie w PHP 8.2 poniższego modyfikatora celem oznaczenia całej klasy.

readonly class MyValueObject {
 public string $myValue;
}  

A nie jak uprzednio (w wersji PHP 8.1), samych jej właściwości. Pozwala to na odgórne ustawienie wszystkich parametrów, a zdefiniowanych wcześniej, od razu w opcji wyłącznie do odczytu. Co umożliwia również redukcję kodu i prostszy zapis.

AllowDynamicProperties Attribute (atrybut pozwalający na dynamiczne właściwości)

Jako że omawiana aktualizacja wycofuje właściwości dynamiczne, a wraz z wydaniem PHP 9.0 ich użycie będzie powiązane z pojawieniem się wyjątku: ErrorException.

#[AllowDynamicProperties]
 class User() {}
 $user = new User();
 $user->foo = 'bar'; 

PHP 8.2 wprowadza atrybut: AllowDynamicProperties umożliwiający usunięcie komunikatu z ostrzeżeniem: E_DEPRECATED oraz wykorzystanie parametru w skorelowanej klasie. To ostatnie stanie się możliwe po zadeklarowaniu wskazanej dyrektywy.

Disjunctive Normal Form Types (typy DNF)

Dodanie powyższej funkcjonalności daje szansę powiązania Union i Intersection Types. Przykład zakłada, że zdefiniowane zostały poniższe interfejsy i klasy:

interface A {}
interface B {}
interface C extends A {}
interface D {}

class W implements A {}
class X implements B {}
class Y implements A, B {}
class Z extends Y implements C {} 

Wówczas:

// Accepts an object that implements both A and B,
// OR an object that implements D
(A&B)|D

// Accepts an object that implements C, 
// OR a child of X that also implements D,
// OR null
C|(X&D)|null

// Accepts an object that implements all three of A, B, and D, 
// OR an int, 
// OR null.
(A&B&D)|int|null 

Funkcjonalność będzie działać, o ile Intersection Types zostaną zgrupowane w nawiasie.

Fetch properties of enums in const expressions (pobieranie właściwości enumów w wyrażeniach stałych)

Od wersji PHP 8.2 użycie: ->/?-> celem pobrania właściwości enum w wyrażeniach stałych stanie się możliwe.

enum A: string {
 case B = 'B';
 // This is currently not permitted
 const C = [self::B->value => self::B];
} 

Zmiana została wprowadzona, aby ułatwić uzyskanie nazwy i wartości w miejscach, w których obiekty enum są niedozwolone.

Sensitive Parameter value redaction (redakcja parametrów względem wrażliwych wartości)

Aby uniemożliwić podanie identyfikujących użytkownika informacji w momencie wystąpienia błędu tyczącego się, np. nieprawidłowości w strukturze i funkcjonowaniu kodu, takich jak hasło bądź nazwa konta, w PHP 8.2 można je odznaczyć atrybutem:

function test(
    $foo,
    #[\SensitiveParameter] $bar,
    $baz
) {
    throw new \Exception('Error');
}
 
test('foo', 'bar', 'baz');
 
/*
Fatal error: Uncaught Exception: Error in test.php:8
Stack trace:
#0 test.php(11): test('foo', Object(SensitiveParameterValue), 'baz')
#1 {main}
  thrown in test.php on line 8
*/ 

Dzięki czemu nie zostaną one uwidocznione. A więc wrażliwa wartość nie przejawi się w śladzie stosu.

Dodatkowe zmiany i nowe funkcjonalności

PHP 8.2 oprócz powyższych modyfikacji wycofuje niektóre ujęcia lub wprowadza szereg drobniejszych. W odniesieniu do obecnego wydania, to ostatnie, ma miejsce zwłaszcza w przypadku funkcji.

Jak wygląda nowa wersja języka PHP?

Tych dodano całkiem sporo, toteż część z nich istotnie omówimy.


Oto, jakie funkcjonalności pojawiły się w PHP 8.2:

  • nowa funkcja: mysqli_execute_query oraz metoda:
    mysqli::execute_query pozwolą na łatwiejsze przygotowanie i pobieranie wyników z bazy SQL;
  • zaimplementowanie funkcji: curl_upkeep do rozszerzenia Curl wywoła: curl_easy_upkeep() i umożliwi podtrzymanie połączenia. Opcja będzie działać w przypadku, gdy rozszerzenie Curl jest skompilowane z libcurl (wersja 7.62 lub nowsza);
  • uwzględniono dodatkowe wsparcie dla funkcji: curl_getinfo.
    Podanie stałej: CURLINFO_EFFECTIVE_METHOD zezwoli na pobranie wartości effective_method zawierającej nazwę efektywnej metody żądania HTTP;
  • funkcja: memory_reset_peak_usage w PHP 8.2 umożliwi resetowanie szczytowego użycia pamięci zwróconego przez: memory_get_peak_usage;
  • ini_parse_quantity będzie przetwarzać tak, jak dotychczas rozmiar danych w pliku PHP INI, acz zwróci go w bajtach;
  • dodano wsparcie dla modyfikatora: /n (no capture) w funkcjach: preg_*.


Oto, jakie aspekty wycofano w wersji PHP 8.2:

  • dynamiczne ustawianie wartości dla niezadeklarowanej właściwości klasy;
  • rozszerzenie Mbstring umożliwiające kodowanie lub dekodowanie łańcuchów do Base64, Quoted-Printable, Uuencode oraz HTML Entities;
  • niektóre wzorce callables niedziałające z $callable();
  • funkcje: utf8_encode i utf8_decode mające na celu konwersję zasobów między kodowaniem ISO-8859-1 i UTF-8;
  • lokowanie znaku: ${} (dolara) poza nawiasem klamrowym w przypadku osadzania zmiennych w łańcuchach.


Oto, jakie inne zmiany zaszły w PHP 8.2:

  • usunięto wsparcie dla kompilacji rozszerzenia mysqli z libmysql;
  • od teraz można stosować stałe w cechach;
  • strtolower() i strtoupper() nie są już wrażliwe na lokalizację.

Jak ustawić dowolną wersję PHP?

Zmiany w tym zakresie możesz dokonać za pomocą paru kliknięć w panelu hostingu. W tym celu spójrz na kroki odznaczone poniżej.

Warto wiedzieć: Modyfikacja danego ustawienia może wiązać się z niestabilnością zasobów, jeśli system plików strony okaże się w jakimś ujęciu niekompatybilny z aktualizacją. W danej sytuacji problem można rozwiązać poprzez wrócenie do starszej wersji języka PHP.

Krok 1

Zaloguj się do panelu hostingu i przejdź do zakładki: „Dodatkowe funkcje”. Tutaj wybierz: „Select PHP version”.

Jak zaktualizować wersję PHP?

Krok 2

W sekcji: „Bieżąca wersja PHP” kliknij pole z rozwijalną listą opcji, a następnie wybierz pożądane ustawienie. Zatwierdź operację, posługując się przyciskiem: „Ustaw jako bieżącą”.

Zmiana wersji PHP

Podsumowanie

Jakkolwiek PHP 8.2 nie jest jeszcze ostateczną kompilacją, tak wraz z początkiem września bieżącego periodu wejdzie w ostatnią fazę rozwoju w ramach tzw. Release Candidate. Co oznacza sześć następujących po sobie w cyklu dwutygodniowym tur zmian i poprawek, które wraz z końcem listopada przyniosą finalną wersję.

Ścieżkę postępu tego procesu można przeniknąć na oficjalnej stronie wiki – PHP 8.2.

 

 

 

 

Odbieramy telefony, odpisujemy na maile, nie ukrywamy kosztów, a dodatkowo oferujemy najszybsze pakiety hostingowe na rynku. Uważasz, że to zwroty marketingowe? Sprawdź sam/a!

Jeśli nie będziesz zadowolony/a, zwrócimy Ci pieniądze.
Twoje strony i sklepy przeniesiemy za darmo!

Hosting WordPressHosting Magento

Jeżeli masz jakiekolwiek pytania, skontaktuj się z nami! Kliknij tutaj.

Chcesz dowiedzieć się o nas trochę więcej? Przejdź na stronę JCHost.pl.

Daj znać znajomym!