PHP 8.4 wprowadza szereg istotnych ulepszeń i nowych funkcjonalności, które przyspieszą działanie Twoich stron, zaś programistom pozwolą tworzyć jeszcze wydajniejsze i bezpieczniejsze aplikacje.
Wśród najważniejszych nowości znajdziemy m.in. nowy sposób na kontrolę właściwości klas, nowe funkcje do obsługi tablic (array_find, array_find_key, array_any, array_all), ulepszone wsparcie dla szyfrowania poprzez rozszerzenie Sodium (AEGIS-128L i AEGIS256), a także szereg usprawnień w obsłudze ciągów wielobajtowych i wyrażeń regularnych. Zachęcamy do przetestowania nowej wersji PHP w swoich projektach. Poniżej znajdziecie szczegółowy opis najważniejszych zmian i nowości w PHP 8.4!
Szybsze działanie PHP 8.4 – co to oznacza dla Twojej strony?
PHP 8.4 wprowadza szereg usprawnień, które przekładają się na szybsze przetwarzanie skryptów i lepszą wydajność stron internetowych. Szybsze ładowanie = zadowoleni użytkownicy. Dzięki zoptymalizowanemu przetwarzaniu skryptów w PHP 8.4, Twoja strona będzie ładować się zauważalnie szybciej. Ma to ogromne znaczenie dla użytkowników – według badań, już 1 sekunda opóźnienia może spowodować frustrację i rezygnację z odwiedzin strony. Szybsze działanie przekłada się więc bezpośrednio na:
- lepsze wrażenia użytkowników,
- niższy współczynnik odrzuceń,
- dłuższy czas spędzany na stronie,
- większą konwersję.
Szybkość ładowania strony jest również ważnym czynnikiem rankingowym dla Google. Wyszukiwarka preferuje szybkie strony, które zapewniają dobre doświadczenia użytkownikom.
Property Hooks w PHP 8.4 – nowy sposób na kontrolę właściwości klas
PHP 8.4 wprowadza bardzo ciekawą nowość – property hooks. To mechanizm, który pozwala na większą kontrolę nad tym, jak odczytywane i zapisywane są właściwości w klasach PHP.
Czym są property hooks?
Property hooks to sposób na zdefiniowanie zachowania podczas dostępu do właściwości klasy. Możemy określić co ma się dziać podczas:
- odczytu właściwości (hook
get
) - zapisu właściwości (hook
set
)
Podstawowa składnia wygląda następująco:
class User {
public string $email {
get { /* kod wykonywany przy odczycie */ }
set ($value) { /* kod wykonywany przy zapisie */ }
}
}
Walidacja podczas zapisu:
class User {
public string $email {
set ($value) {
if (!filter_var($value, FILTER_VALIDATE_EMAIL)) {
throw new InvalidArgumentException('Nieprawidłowy email');
}
$this->email = $value;
}
}
}
Modyfikacja podczas odczytu:
class User {
public string $email {
get {
return 'mailto:' . $this->email;
}
}
}
Property hooks pozwalają też na tworzenie właściwości wirtualnych, które nie mają bezpośredniego odpowiednika w pamięci:
class User {
public string $fullName {
get => $this->firstName . ' ' . $this->lastName;
set {
[$this->firstName, $this->lastName] = explode(' ', $value, 2);
}
}
private string $firstName;
private string $lastName;
}
Zalety property hooks
- Pozwalają na walidację i modyfikację wartości bezpośrednio przy definicji właściwości
- Eliminują potrzebę tworzenia getterów i setterów
- Umożliwiają definiowanie właściwości w interfejsach
- Dają większą kontrolę nad stanem obiektu
Na co uważać?
- Nie działają dobrze z tablicami – modyfikacje w miejscu (np.
$obj->array[] = 1
) nie wywołują hooka - Wartości domyślne właściwości nie przechodzą przez hook
set
- Należy ostrożnie używać referencji z hookami
Nowe funkcje array_find, array_find_key, array_all, i array_any
PHP 8.4 wprowadza cztery nowe funkcje tablicowe, które znacząco upraszczają często wykonywane operacje na tablicach. Nowe funkcje pozwalają na wyszukiwanie elementów spełniających określone kryteria oraz sprawdzanie, czy wszystkie lub dowolny element tablicy spełnia zadany warunek.
Pierwsza para nowych funkcji – array_find() i array_find_key() – służy do wyszukiwania pierwszego elementu tablicy spełniającego zadany warunek. array_find() zwraca wartość znalezionego elementu, podczas gdy array_find_key() zwraca jego klucz. Jeśli żaden element nie spełnia warunku, obie funkcje zwracają null.
Przykład użycia:
$numbers = [1, 3, 5, 8, 10];
// Znajdź pierwszą parzystą liczbę
$firstEven = array_find($numbers, fn($n) => $n % 2 == 0); // Zwraca: 8
// Znajdź klucz pierwszej parzystej liczby
$firstEvenKey = array_find_key($numbers, fn($n) => $n % 2 == 0); // Zwraca: 3
Druga para funkcji – array_all() i array_any() – pozwala sprawdzić, czy wszystkie lub dowolny element tablicy spełnia określony warunek. array_all() zwraca true tylko jeśli wszystkie elementy spełniają warunek, podczas gdy array_any() zwraca true jeśli choć jeden element go spełnia.
Przykład użycia:
$emails = ['user@example.com', 'admin@example.com'];
// Sprawdź czy wszystkie elementy to poprawne adresy email
$allValid = array_all($emails, fn($e) => filter_var($e, FILTER_VALIDATE_EMAIL)); // Zwraca: true
// Sprawdź czy którykolwiek element zawiera "admin"
$hasAdmin = array_any($emails, fn($e) => str_contains($e, 'admin')); // Zwraca: true
Te nowe funkcje znacząco upraszczają kod i eliminują potrzebę pisania własnych pętli do przeszukiwania tablic. Są szczególnie przydatne w przypadku filtrowania danych i walidacji.
BCMath: Nowa funkcja bcdivmod w PHP 8.4
W PHP 8.4 wprowadzono nową funkcję bcdivmod do rozszerzenia BCMath, która pozwala na jednoczesne wykonanie dzielenia i obliczenia reszty z dzielenia dla liczb o dowolnej precyzji.
Funkcja ta jest szczególnie przydatna w sytuacjach, gdy potrzebujemy zarówno ilorazu jak i reszty z dzielenia, ponieważ pozwala uniknąć konieczności osobnego wywoływania funkcji bcdiv i bcmod. Dzięki temu kod staje się bardziej wydajny i czytelny.
Przykład użycia:
$wynik = bcdivmod('42', '10'); // Zwraca tablicę ["4", "2"]
// gdzie "4" to iloraz, a "2" to reszta z dzielenia
Funkcja przyjmuje następujące parametry:
- $num1 – dzielna jako string,
- $num2 – dzielnik jako string,
- $scale – opcjonalna precyzja dla reszty z dzielenia (domyślnie używana jest globalna precyzja).
Jeśli próbujemy dzielić przez zero, funkcja rzuci wyjątek DivisionByZeroError. W przypadku niepoprawnych danych wejściowych (np. ciągów znaków nie będących liczbami) zostanie rzucony wyjątek ValueError.
Jest to bardzo przydatne rozszerzenie BCMath, które upraszcza pracę z dokładnymi obliczeniami matematycznymi w PHP, szczególnie w aplikacjach finansowych i księgowych.
Nowe funkcje mb_ucfirst i mb_lcfirst
PHP 8.4 wprowadza dwie nowe funkcje do biblioteki mbstring – mb_ucfirst() oraz mb_lcfirst(), które zapewniają bezpieczną obsługę wielobajtowych znaków przy zmianie wielkości pierwszego znaku w łańcuchu.
Funkcja mb_ucfirst()
Funkcja mb_ucfirst() zamienia pierwszy znak łańcucha na wielką literę, zachowując poprawną obsługę znaków wielobajtowych. Jest to bezpieczniejsza alternatywa dla standardowej funkcji ucfirst().
Przykład użycia:
$text = "łódź płynie";
echo mb_ucfirst($text); // Wyświetli: "Łódź płynie"
Funkcja mb_lcfirst()
Funkcja mb_lcfirst() zamienia pierwszy znak łańcucha na małą literę, również z zachowaniem poprawnej obsługi znaków wielobajtowych. Przykład:
$text = "ŻÓŁW";
echo mb_lcfirst($text); // Wyświetli: "żÓŁW"
Zalety nowych funkcji:
- poprawna obsługa znaków diakrytycznych i innych znaków wielobajtowych,
- zgodność z regułami Unicode dotyczącymi wielkości liter,
- możliwość określenia kodowania znaków poprzez opcjonalny parametr $encoding,
- lepsza alternatywa dla standardowych funkcji ucfirst() i lcfirst() przy pracy z tekstem zawierającym znaki spoza ASCII.
Nowe funkcje są szczególnie przydatne przy pracy z tekstami w językach używających znaków diakrytycznych oraz przy internacjonalizacji aplikacji.
Nowe funkcje mb_trim, mb_ltrim i mb_rtrim w PHP 8.4
PHP 8.4 wprowadza długo wyczekiwane funkcje mb_trim, mb_ltrim i mb_rtrim, które są wielobajtowymi odpowiednikami istniejących funkcji trim, ltrim i rtrim. Jest to istotne rozszerzenie możliwości obsługi wielobajtowych ciągów znaków w PHP.
Główne cechy nowych funkcji
Nowe funkcje pozwalają na bezpieczne usuwanie białych znaków (lub innych określonych znaków) z początku i końca ciągu znaków z zachowaniem poprawnej obsługi znaków wielobajtowych. W przeciwieństwie do standardowych funkcji trim(), nowe funkcje mb_trim(), prawidłowo obsługują znaki Unicode i różne kodowania.
Domyślne zachowanie
Funkcje mb_trim domyślnie usuwają nie tylko standardowe białe znaki (spacje, tabulatory, znaki nowej linii), ale także znaki z bloku Unicode Z oraz kilka innych znaków specjalnych. Daje to większą elastyczność w porównaniu do standardowych funkcji trim().
Zalety nowych funkcji:
- bezpieczna obsługa znaków wielobajtowych i Unicode,
- możliwość określenia własnego zestawu znaków do usunięcia,
- opcjonalny parametr kodowania pozwalający na pracę z różnymi kodowaniami znaków,
- lepsza kompatybilność z międzynarodowymi systemami pisma.
Nowe funkcje są szczególnie przydatne w aplikacjach wielojęzycznych oraz wszędzie tam, gdzie mamy do czynienia z tekstem zawierającym znaki spoza ASCII. Ich wprowadzenie znacząco ułatwia pracę programistom PHP tworzącym aplikacje obsługujące różne języki i systemy pisma.
Nowe możliwości CURL w PHP 8.4
Nowe opcje debugowania
PHP 8.4 wprowadza nową opcję CURLOPT_DEBUGFUNCTION, która pozwala na ustawienie własnej funkcji callback do przechwytywania informacji debugowania podczas wykonywania żądań CURL. Jest to szczególnie przydatne gdy potrzebujemy większej kontroli nad tym jak informacje debugowania są przetwarzane. Funkcja callback jest wywoływana wielokrotnie podczas wykonywania żądania CURL i może decydować co zrobić z tymi informacjami.
Nowe informacje o funkcjach w curl_version()
Funkcja curl_version() w PHP 8.4 zwraca dodatkową tablicę feature_list zawierającą listę funkcji CURL i informację czy są one obsługiwane. Ułatwia to sprawdzenie czy konkretna funkcjonalność (np. HTTP/2, HSTS itp.) jest dostępna w danej instalacji CURL. Jest to bardziej czytelne niż sprawdzanie bitowej maski funkcji zwracanej we wcześniejszych wersjach.
Nowa opcja CURLOPT_TCP_KEEPCNT
PHP 8.4 wprowadza nową opcję CURLOPT_TCP_KEEPCNT, która pozwala ustawić maksymalną liczbę prób utrzymania połączenia TCP keep-alive. Domyślna wartość to 9, ale można ją zwiększyć lub zmniejszyć według potrzeb. Opcja ta daje większą kontrolę nad zachowaniem połączeń TCP keep-alive w połączeniu z innymi opcjami jak CURLOPT_TCP_KEEPALIVE.
Nowa opcja CURLOPT_PREREQFUNCTION
W PHP 8.4 dodano nową opcję CURLOPT_PREREQFUNCTION pozwalającą ustawić własną funkcję callback, która decyduje czy żądanie powinno być kontynuowane czy przerwane. Funkcja jest wywoływana po nawiązaniu początkowego połączenia, ale przed wysłaniem właściwego żądania. Jest to przydatne w sytuacjach gdy aplikacja musi zdecydować o kontynuowaniu połączenia na podstawie adresu IP i portu źródłowego oraz docelowego.
Nowa opcja CURLOPT_SERVER_RESPONSE_TIMEOUT
PHP 8.4 wprowadza nową stałą CURLOPT_SERVER_RESPONSE_TIMEOUT zastępującą przestarzałą CURLOPT_FTP_RESPONSE_TIMEOUT. Pozwala ona określić maksymalny czas oczekiwania na odpowiedź serwera nie tylko dla FTP, ale także dla innych protokołów jak SFTP, SCP, IMAP, POP3 i SMTP. Wewnętrznie obie stałe mają tę samą wartość (112).
Nowe tryby zaokrąglania w funkcji round() w PHP 8.4
PHP 8.4 wprowadza cztery nowe tryby zaokrąglania w funkcji round(), które znacząco rozszerzają możliwości precyzyjnego zaokrąglania liczb w aplikacjach PHP. Przyjrzyjmy się nowym trybom i ich zastosowaniu.
Nowe tryby zaokrąglania
Do istniejących trybów zaokrąglania dodano następujące nowe opcje:
- PHP_ROUND_CEILING – zaokrągla liczbę do najbliższej większej liczby całkowitej. Na przykład 1.1 i 1.5 zostaną zaokrąglone do 2, a -1.1 i -1.5 do -1.
- PHP_ROUND_FLOOR – zaokrągla liczbę do najbliższej mniejszej liczby całkowitej. Na przykład 1.1 i 1.9 zostaną zaokrąglone do 1, a -1.1 i -1.9 do -2.
- PHP_ROUND_TOWARD_ZERO – zaokrągla liczbę w kierunku zera. Na przykład 1.9 i 1.1 zostaną zaokrąglone do 1, a -1.9 i -1.1 do -1.
- PHP_ROUND_AWAY_FROM_ZERO – zaokrągla liczbę w kierunku od zera. Na przykład 1.1 i 1.9 zostaną zaokrąglone do 2, a -1.1 i -1.9 do -2.
Zalety nowych trybów
Nowe tryby zaokrąglania przynoszą szereg korzyści:
- Większa precyzja i kontrola nad sposobem zaokrąglania liczb w aplikacjach finansowych i naukowych
- Kompatybilność z innymi językami programowania i systemami, które używają podobnych trybów zaokrąglania
- Możliwość dostosowania zaokrąglania do konkretnych wymagań biznesowych
Przykład użycia
$liczba = 3.14; echo round($liczba, 0, PHP_ROUND_CEILING); // Wynik: 4 echo round($liczba, 0, PHP_ROUND_FLOOR); // Wynik: 3 echo round($liczba, 0, PHP_ROUND_TOWARD_ZERO);// Wynik: 3 echo round($liczba, 0, PHP_ROUND_AWAY_FROM_ZERO); // Wynik: 4
Wsparcie AEGIS-128L i AEGIS256
W PHP 8.4 wprowadzono wsparcie dla nowych algorytmów szyfrowania AEGIS-128L i AEGIS-256 w rozszerzeniu Sodium. Jest to znaczące ulepszenie w zakresie bezpieczeństwa i wydajności szyfrowania w PHP.
Co to jest AEGIS?
AEGIS to rodzina algorytmów szyfrowania uwierzytelnionego bazujących na AES, które oferują lepszą wydajność niż popularny AES-GCM. Wsparcie dla AEGIS w PHP 8.4 jest dostępne jeśli rozszerzenie Sodium zostało skompilowane z libsodium w wersji 1.0.19 lub nowszej.
Nowe funkcje i stałe
PHP 8.4 wprowadza sześć nowych funkcji i cztery nowe stałe dla obsługi algorytmów AEGIS. Dla AEGIS-128L mamy:
- sodium_crypto_aead_aegis128l_keygen() – generuje klucz,
- sodium_crypto_aead_aegis128l_encrypt() – szyfruje dane,
- sodium_crypto_aead_aegis128l_decrypt() – deszyfruje dane.
Analogiczne funkcje istnieją dla AEGIS-256.
Przykład użycia
Oto prosty przykład szyfrowania z użyciem AEGIS-128L:
// Generowanie klucza
$key = sodium_crypto_aead_aegis128l_keygen();
// Generowanie nonce
$nonce = random_bytes(16);
// Szyfrowanie wiadomości
$message = "Tajna wiadomość";
$encrypted = sodium_crypto_aead_aegis128l_encrypt($message, "", $nonce, $key);
// Deszyfrowanie
$decrypted = sodium_crypto_aead_aegis128l_decrypt($encrypted, "", $nonce, $key);
Zalety AEGIS
Wprowadzenie AEGIS przynosi kilka istotnych korzyści:
- znacznie lepsza wydajność w porównaniu do AES-GCM,
- wysoki poziom bezpieczeństwa dzięki uwierzytelnionemu szyfrowaniu,
- kompatybilność z nowoczesnymi standardami kryptograficznymi.
PHP 8.4 – dostępność w cyber_Folks
Na naszych serwerach shared oraz zarządzanych – VPS i dedykowanych DirectAdmin dostępne jest już PHP w wersji 8.4.1.
Należy pamiętać, że PHP 8.4 jest nową wersją i nie wszystkie aplikacje mogą być z nią w pełni kompatybilne. Przed aktualizacją do PHP 8.4 zalecamy:
- wykonanie kopii zapasowej strony
- dokładne przetestowanie działania aplikacji w środowisku testowym
- sprawdzenie kompatybilności używanych wtyczek i dodatków
- ostrożne wdrożenie zmiany na środowisku produkcyjnym
W razie wystąpienia problemów po aktualizacji, zawsze można wrócić do poprzedniej, stabilnej wersji PHP poprzez panel administracyjny.
PHP 8.4 – podsumowanie
Nowa wersja PHP 8.4 to nie tylko zbiór technicznych ulepszeń – to realne korzyści dla Twojej strony i jej użytkowników. Szybsze działanie skryptów przekłada się bezpośrednio na:
- krótszy czas ładowania strony – nawet ponad 20% w porównaniu do starszych wersji,
- lepsze pozycjonowanie w Google – szybkość strony to jeden z kluczowych czynników rankingowych,
- większe zadowolenie użytkowników – 53% odwiedzających opuszcza stronę, jeśli ładuje się dłużej niż 3 sekundy,
- wyższą konwersję – według badań, każda sekunda opóźnienia może obniżyć konwersję nawet o 7%.
Dodatkowo, nowe funkcje bezpieczeństwa jak AEGIS czy ulepszone wsparcie dla szyfrowania sprawiają, że Twoja strona będzie lepiej chroniona przed współczesnymi zagrożeniami. Aktualizacja do PHP 8.4 to inwestycja w przyszłość Twojej strony.
W cyber_Folks nieustannie śledzimy rozwój technologii i implementujemy najnowsze rozwiązania, by zapewnić naszym klientom najwyższą jakość usług hostingowych. PHP 8.4 to kolejny krok w tym kierunku, który pomoże Twojej stronie działać jeszcze szybciej i bezpieczniej.
Polecane dla Ciebie
Czego hosterzy nie mówią głośno o backupie danych?
Backup danych to jeden z kluczowych aspektów wpływających na bezpieczeństwo informacji oraz treści na stronie. Dzięki niemu – nawet w […]
Hosting seo
Hosting seo – prawda czy mit? Czy istnieją hostingi lepsze i gorsze pod kątem widoczności w wyszukiwarkach? Niedawno na jednej […]
Certyfikaty SSL – czym różni się walidacja DV/OV/EV?
Certyfikaty SSL w czasach, kiedy na stronach internetowych pozostawiamy swoje dane, a także płacimy za produkty, stają się niezbędne. Bezpieczeństwo […]
Szukasz dalej?