PHP 8.4 – co nowego? Test wydajności

PHP 8.4

Jakkolwiek wydana 21 listopada br. aktualizacja PHP 8.4 nie wprowadza tak brzemiennych w skutkach zmian, jak np. PHP 8.0, tak kontynuuje zapoczątkowany wówczas trend, dostarczając kilka usprawniających pracę programistów opcji.

PHP 8.4 — jakie poprawki i modyfikacje zawiera? Przegląd usprawnień.

Oprócz naprawy kilkunastu błędów i ogólnej optymalizacji, PHP 8.4 implementuje też parę nowych funkcji, dodaje dodatkowe wsparcie przy użytku niektórych metod. A także wdraża szereg usprawnień w obrębie wydajności.

Jak więc wygląda nowa odsłona tego języka? Szerzej o tym poniżej.

Warto wiedzieć: Wydana w tym samym czasie, co PHP 8.4, wersja PHP 8.4.1, będąca stricte poprawką bezpieczeństwa, eliminuje 139 ogólnych błędów, w tym 37 odnoszących się do silnika, 10 związanych z Opcache, 16 skorelowanych z rozszerzeniem DOM oraz 2 łączące się z biblioteką cURL.

Wydajność PHP 8.4 vs. 8.x vs. 7.4 vs. 5.6

Mimo iż od kilku wydań różnice dotyczące osiągów między poszczególnymi wersjami języka nie są już tak znaczące, jak kiedyś, tak trend przeważnie jest wzrostowy. Jak bowiem widać na poniższym zestawieniu dotyczącym parametrów wydajnościowych dla PHP 8.1, PHP 8.2, PHP 8.3 i PHP 8.4 ma to miejsce również i przy bieżącej aktualizacji.

PHP 8.4 — jaki wpływ na wydajność mają wprowadzone poprawki?

Test ten został zrealizowany na serwerze AMD Ryzen 9 7950X przez zespół Openbenchmarking.org i dostarcza ogólne wyniki dla benchmark PHPBench.

Można na ich podstawie wysnuć, że rezultat uzyskany przez PHP 8.4 (dev) jest:

  • o 0,76% wyższy od PHP 8.3;
  • o 6,76% wyższy od PHP 8.2;
  • o 2.22% wyższy od PHP 8.1.

Dla szerszego porównania (i danych uwzględnionych tutaj) jest on również lepszy od dużo wcześniejszych wersji:

  • o 94.7% względem PHP 7.4;
  • o 338.3% względem PHP 5.6.

Od kilku ostatnich uaktualnień nie ma więc już tak drastycznych skoków wydajności, jak wyglądało to jeszcze niedawno. Niemniej język PHP wciąż ewoluuje i mimo iż nie robią tego w sposób znaczący ww. osiągi, to jego aktualną użyteczność podbijają wciąż nowo dodawane i potrzebne funkcjonalności.

Warto wiedzieć: Według raportów od W3Techs, język PHP jest używany przez 75.4% wszystkich stron internetowych, z czego 28,7% bazuje na którejś z wersji 8.x.

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

Co nowego w PHP 8.4

Wśród dodanych ulepszeń i poprawek nie zabrakło kilku ciekawostek i niespodzianek dotyczących obsługi niektórych funkcji i operacji.

PHP 8.4 — jakie nowości dodano przy okazji tej aktualizacji?

Po pełną listę aktualizacji można z kolei sięgnąć, przechodząc tutaj.

Tymczasem oto najważniejsze zmiany, jakie zaszły w PHP 8.4:

Property Hooks (haki właściwości)

Poprawka ta oferuje programistom prostszy sposób dostępu i modyfikacji chronionej lub prywatnej właściwości klasy.

class Locale
{
    public string $languageCode;

    public string $countryCode
    {
        set (string $countryCode) {
            $this->countryCode = strtoupper($countryCode);
        }
    }

    public string $combinedCode
    {
        get => \sprintf("%s_%s", $this->languageCode, $this->countryCode);
        set (string $value) {
            [$this->languageCode, $this->countryCode] = explode('_', $value, 2);
        }
    }

    public function __construct(string $languageCode, string $countryCode)
    {
        $this->languageCode = $languageCode;
        $this->countryCode = $countryCode;
    }
}

$brazilianPortuguese = new Locale('pt', 'br');
var_dump($brazilianPortuguese->countryCode); // BR
var_dump($brazilianPortuguese->combinedCode); // pt_BR  

W uprzedniej konfiguracji, aby obsłużyć takie działanie, niezbędne było użycie getterów i setterów oraz dodatkowych metod. Teraz jednak można zdefiniować własne haki właściwości bezpośrednio. Co odpowiada jednocześnie za redukcję kodu oraz bardziej przejrzysty zapis.

Asymmetric visibility (widoczność asymetryczna)

Zmiana ta pozwala określić opcje widoczności właściwości klasy (public, protected lub private) w zależności od kontekstu (zapisu lub odczytu).

class PhpVersion
{
    public private(set) string $version = '8.4';

    public function increment(): void
    {
        [$major, $minor] = explode('.', $this->version);
        $minor++;
        $this->version = "{$major}.{$minor}";
    }
}  

Przykładowy sposób użycia tego udogodnienia to sytuacja, gdy chcemy udostępnić właściwość do odczytu, ale niekoniecznie do zapisu.
Modyfikacja ta zwiększa kontrolę dostępu do danych oraz bezpieczeństwo samego kodu.

Nowa funkcja array_find()

Wprowadzone usprawnienie umożliwi weryfikację pierwszego elementu w tablicy, dla którego wywołanie (callback) zwraca wartość true.

$animal = array_find(
    ['dog', 'cat', 'cow', 'duck', 'goose'],
    static fn (string $value): bool => str_starts_with($value, 'c'),
);

var_dump($animal); // string(3) "cat" 

Funkcja ta zawiera kilka wariacji, tj.:

  • array_find_key() – oznacza zwrot klucza pierwszego elementu, który
    spełnia założenia wywołania;
  • array_any() – wiąże się z uzyskaniem wartości true, jeżeli przynajmniej
    jeden element realizuje warunek;
  • array_all() – zwraca true, jeśli wszystkie elementy pasują do
    uwzględnionego w callbacku wskazania.

new MyClass()->method() – nowa konstrukcja składni

Od wydania PHP 8.4 nie trzeba już: „zawijać” odwołań do metod w nawiasy. Sposób zapisu kodu może więc obecnie wyglądać jak poniżej:

class PhpVersion
{
    public function getVersion(): string
    {
        return 'PHP 8.4';
    }
}

var_dump(new PhpVersion()->getVersion()); 

Operacje exit i die jako funkcje

Do tej pory oba elementy mogły być używane zarówno jako wyrażenia (exit;), jak i funkcje (exit(0);), jednak to ostatnie przeznaczenie miało pewne ograniczenia. Między innymi:

  • brak wsparcia dla nazwanych argumentów;
  • nie można było skorzystać z przekazania z wywołaniem;
  • ignorowano strict_types.

Od wydania PHP 8.4 obie konstrukcje językowe exit() i die() będą traktowane jak pełnoprawne funkcje. Z tym, jednak zastrzeżeniem, że wariant wyrażenia zapisany w formie bez nawiasów nadal będzie odgrywał taką samą rolę, jak uprzednio.

Nowy sposób ustawiania stanu dla JIT

Wcześniej, aby wyłączyć wprowadzoną przy okazji PHP 8.0 kompilację typu Just-In-Time, wymagane było dodanie wartości 0 dla opcache.jit_buffer_size.
Dana operacja nie była jednak kojarzona zbyt dobrze, dlatego od wydania PHP 8.4, aby zmienić stan dla JIT:

opcache.jit=disable
opcache.jit_buffer_size=64m 

Należy zastosować wyżej wskazany sposób.

Inne zmiany i nowe funkcjonalności

Oprócz wskazanych usprawnień, PHP 8.4 wycofuje z konstrukcji językowej przestarzałe opcje, uzupełniając równocześnie kod o te bardziej użyteczne.

PHP 8.4 — jakie inne udoskonalenia dostarcza ta kompilacja języka?

Wśród dokonanych zmian znalazło się kilka ciekawostek. Zostaną one omówione poniżej.

 

Oto, jakie funkcjonalności dodano w PHP 8.4:

  • atrybut: #[\Deprecated] – można od teraz za jego pomocą oznaczać przestarzałe metody, klasy i funkcje;
  • grapheme_str_split – funkcja ta będzie odpowiadać za właściwe rozdzielanie zbiorów symboli;
  • mb_ucfirst, mb_lcfirst, mb_trim, mb_ltrim i mb_rtrim – funkcje te dostarczają sposób obsługi i ucinania wielobajtowych ciągów znaków;
  • request_parse_body() – funkcja służy do parsowania zawartości multipart/form-data z tytułu żądań HTTP;
  • http_get_last_response_headers i http_clear_last_response_headers – funkcje te oferują uzyskanie informacji zwrotnej o ostatnich nagłówkach odpowiedzi w postaci tablicy i opcję wyczyszczenia ich;
  • DateTime::getMicrosecond() i DateTimeImmutable::setMicrosecond($microsecond) – metody te pozwolą lepiej pobierać i określać znacznik czasowy.

 

Oto, jakie elementy uznano za przestarzałe w wydaniu PHP 8.4:

  • Implicit nullable types – aby przypisać parametrowi wartość null w funkcji należy od teraz skorzystać z prefiksu: „?”;
  • E_STRICT – od wydania PHP 8.4 stała ta, służąca do raportowania błędów, zostanie zastąpiona innym framework’iem;
  • użytek „_” do określenia nazwy klasy – nie będzie już możliwy;
  • mysqli_ping() i mysqli_refresh() – funkcje te, odpowiadające za zarządzanie komunikacją w MySQL, odejdą w zapomnienie z uwagi na ulepszony sposób obsługi połączeń w bazie danych;
  • brak możliwości rozszerzania GMP – od wydania PHP 8.4 nie można już przedefiniowywać stałych tej klasy, jako że uznano ją za ostateczną wersję.

 

Poniżej dodatkowe zmiany w PHP 8.4:

  • wsparcie dla HTML5: PHP 8.4 uwzględnia nową klasę \Dom\HTMLDocument do właściwego parsowania kodu;
  • aktualizacja OpenSSL: rozszerzenie to wymaga teraz wersji 1.1.1 do prawidłowego działania;
  • wsparcie dla Lazy Objects: aktualizacja wprowadza możliwość tworzenia instancji klas i inicjalizowania ich tylko w razie potrzeby;
  • nowa implementacja JIT oparta na framework’u IR: rozwiązanie to redukuje użytek dwóch back-end’ów dla architektur x86_64 i Aarch64 do generowania kodu do jednego;
  • dodanie klasy BcMath\Number: pozwoli na użytek standardowych operatorów (+, -, /) z obiektami BcMath\Number do realizowania obliczeń.

Jak ustawić wybraną wersję PHP?

Aby dokonać aktualizacji wystarczy przejść do panelu hostingu i odznaczyć odpowiednie opcje. Spójrz na kroki zawarte poniżej, aby dowiedzieć się, jak to zrobić.

Warto wiedzieć: Nie wszystkie zmiany wprowadzone przy okazji wydania PHP 8.4 muszą współgrać z istniejącym systemem plików i aktualną architekturą. Z tego też względu w razie wystąpienia błędów dotyczących zgodności zawsze można wrócić do poprzedniej kompilacji.

Krok 1

Po zalogowaniu się do panelu hostingu wybierz w zakładce: „Dodatkowe funkcje” odnośnik prowadzący do: „Select PHP version”.

Jak zmienić wersję PHP na inną? Krok 1.

Krok 2

Przejdź do: „Bieżąca wersja PHP” i wybierz z rozwijalnej listy pożądaną opcję. Na koniec potwierdź wykonaną akcję za pomocą przycisku: „Ustaw jako bieżącą”.

Jak zmienić wersję PHP na inną? Krok 2.

Podsumowanie

Jakkolwiek PHP 8.4 oraz niedawne wydania nie skupiają się już tak mocno na skokowej poprawie wydajności, to jednak można założyć, że nowo dodawane funkcjonalności oraz usprawnienia, redukując zauważalnie kod oraz poprawiając przejrzystość składni, mimo to uczynią dany język przyjaznym do pracy środowiskiem dla programistów.

 

 

 

 

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!