PHP 8.5 – co nowego? Test wydajności
PHP 8.5
Wdrożona 20 listopada 2025 roku aktualizacja PHP 8.5 wprowadza kilka użytecznych nowości usprawniających pracę programistów, odpowiadając równocześnie za większą przejrzystość i czytelność kodu.

Aktualna kompilacja naprawia 94 ogólnych błędów, w tym najwięcej dotyczących podstawowych funkcjonalności (31) i Opcache (17). A równocześnie dodaje szereg ułatwiających działania funkcji, mechanizmów do lepszej obsługi błędów czy metod weryfikacji bieżącej konfiguracji architektury.
Jak zatem prezentuje się nowe PHP 8.5 i jakie udogodnienia wprowadza? O tym szeroko poniżej.
Warto wiedzieć: PHP 8.5 to jedna z ciekawszych aktualizacji. Nowa odsłona tego języka nie jest tak fundamentalna jak wersja 8.0, jednak szereg drobnych, acz praktycznych ulepszeń, czyni ją jedną z bardziej udanych.
Wydajność PHP 8.5 vs. 8.x vs. 7.4 vs. 5.6
Mimo iż PHP 8.5 nieznacznie odstaje od osiągów uprzednich wersji, tak nie jest to uderzająca różnica. Jak albowiem ukazuje to poniższe zestawienie, parametry wydajnościowe wszystkich 4 minionych kompilacji języka (PHP 8.1, PHP 8.2, PHP 8.3 i PHP 8.4) oraz obecnej są zbliżone.

Wskazany test został przeprowadzony na AMD Ryzen Threadripper 7980X przez ekipę Openbenchmarking.org, dostarczając ogólny wgląd w wyniki benchmark PHPBench.
Rezultat uzyskany przez PHP 8.5 (dev) pozwala stwierdzić, iż jest on:
- o 2,98% niższy od PHP 8.4;
- o 0,16% niższy od PHP 8.3;
- o 0,93% niższy od PHP 8.2;
- o 3,92% niższy od PHP 8.1.
Dla szerokiego porównania (oraz danych zawartych tutaj) trzeba jednak zauważyć, iż nowe PHP 8.5 znacząco wyprzedza wcześniejsze wersje języka. To jest:
- o 84,46% osiągi PHP 7.4;
- o 315,18% osiągi PHP 5.6.
Dodatkowo nowo dodane funkcje, które omówimy za moment i inne wdrożone aktualizacje dostrzegalnie poprawiają komfort pracy programistów. Brak wyraźnego skoku w osiągach wydajności nie powinien w związku z tym nader mocno ważyć na ocenie tego wydania.
Warto wiedzieć: 39.6% wszystkich stron www korzysta z którejś z wersji 8x. Najwięcej z nich operuje na PHP 8.2 (38.6%).
Sprawdź najszybszy na rynku hosting WordPress oraz hosting Ecommerce z PHP 8.5.
Co nowego w PHP 8.5
Wśród uwzględnionych w ramach tej wersji opcji znajdziemy kilka ciekawostek reorganizujących sposób obsługi błędów i operacji dokonywanych na kodzie.

Aby sięgnąć po obszerną listę wszystkich wprowadzonych poprawek należy zajrzeć do oficjalnej dokumentacji.
Tymczasem oto najciekawsze zmiany dokonane przy okazji PHP 8.5:
Pipe Operator (operator potoku)
Wdrożone usprawnienie pozwala na „łańcuchowanie” wywołań funkcji, przekazując wartości od jednej do drugiej bez wykorzystywania zmiennych.
$title = ' PHP 8.5 Released ';
$slug = $title
|> trim(...)
|> (fn($str) => str_replace(' ', '-', $str))
|> (fn($str) => str_replace('.', '', $str))
|> strtolower(...);
var_dump($slug);
// string(15) "php-85-released" W rezultacie wynik wyrażenia z lewej strony staje się z automatu danymi wejściowymi (poprzez argument) dla funkcji będącej po prawej.
Eliminuje to tworzenie „zagnieżdżonych wywołań”, czyniąc kod czytelniejszym.
Nowe funkcje array_first() i array_last()
PHP 8.5 dostarcza nowy sposób ustalenia pierwszego i ostatniego elementu tablicy.
array_first([1, 2, 3]); // 1
array_first([2, 3]); // 2
array_first(['a' => 2, 'b' => 1]); // 2
array_first([null, 2, 3]); // null
array_first([]); // null
array_first([$obj, 2, 3]); // $obj
array_first([1])); // 1
array_first([true]); // true Wcześniej, aby pobrać te dane, wykorzystywano niezbyt zgrabne metody typu reset(), end(). Niosło to za sobą ryzyko błędów lub dokonania nieintencjonalnej modyfikacji. Aktualnie do istniejących już w składni funkcji array_key_first() i array_key_last(), operujących na kluczach dodano nowe rozwiązanie, skupiające się na wartościach.
Atrybut #[\NoDiscard]
Aby uniknąć pominięcia zwracanych wartości przy wywoływaniu funkcji, PHP 8.5 wdraża poprawkę, która ostrzeże o zaistnieniu takiej sytuacji.
#[\NoDiscard]
function getPhpVersion(): string
{
return 'PHP 8.5';
}
getPhpVersion();
// Warning: The return value of function getPhpVersion() should
// either be used or intentionally ignored by casting it as (void) W konsekwencji zmiana ta wymusza obsługę wyniku. Można ją jednak intencjonalnie obejść, wykorzystując rzutowanie na void.
Stack trace do obsługi fatalnych błędów
W celu lepszego przetwarzania niezgodności w kodzie, PHP 8.5 wprowadza mechanizm pozwalający uzyskać obszerniejsze informacje na temat zaistniałej nieprawidłowości.
Wcześniej dla typowego zdarzenia zakres zwracanych danych o błędzie nie był zbyt szeroki:
Fatal error: Allowed memory size of 2097152 bytes exhausted
(tried to allocate 5242912 bytes)
in ... on line ...
Jednak wskazana modyfikacja to zmienia:
Fatal error: Allowed memory size of 2097152 bytes exhausted
(tried to allocate 5242912 bytes)
in /mnt/w/localhost/test/php85/error_handlers.php on line 6
Stack trace:
#0 file.php(...): str_repeat('A', 5242880)
#1 file.php(...): my_heavy_function()
#2 {main}
Poprawka ta jest bezpośrednio powiązana z inną, dodaną w ramach tej aktualizacji funkcjonalnością:
Nowe funkcje get_error_handler() i get_exception_handler()
Niezależnie od tego, że tworzenie własnych reguł i mechanizmów obsługi wyjątków oraz błędów na wypadek wystąpienia określonej nieprawidłowości jest od dawna możliwe, tak do PHP 8.5 nie istniał żaden bezpośredni sposób ustalenia, jaki handler jest przy tym aktywny.
/**
* Returns the currently set exception handler, or null if none is set.
* @return callable|null
*/
function get_exception_handler(): ?callable {}
Wprowadzona poprawka ułatwia proces debugowania, bez uciekania się do użytku wcześniejszych nieporęcznych metod przy ustalaniu stanu konfiguracji.
Clone With jako hybryda konstruktu językowego i funkcji
Od teraz można przypisywać nowe właściwości klonowanym obiektom w czasie, gdy ma to miejsce.
readonly class Color
{
public function __construct(
public int $red,
public int $green,
public int $blue,
public int $alpha = 255,
) {}
public function withAlpha(int $alpha): self
{
return clone($this, [
'alpha' => $alpha,
]);
}
}
$blue = new Color(79, 91, 147);
$transparentBlue = $blue->withAlpha(128);
Zadanie to uda się zrealizować poprzez przekazanie tablicy asocjacyjnej do funkcji clone(). Wcześniej do osiągnięcia takiego rezultatu służyły mniej efektywne metody, szczególnie w przypadku właściwości tylko do odczytu.
Nowo zaproponowana składnia i przekształcenie clone w konstrukt językowy pozwala jednak uprościć ten proces.
Closures (domknięcia w wyrażeniach stałych)
PHP 8.5 umożliwi wykorzystanie statycznych domknięć i obiektów wywoływalnych (First-Class Callables) w atrybutach, stałych i stałych klas oraz wartościach domyślnych właściwości.
final class PostsController
{
#[AccessControl(static function (
Request $request,
Post $post,
): bool {
return $request->user === $post->getAuthor();
})]
public function update(
Request $request,
Post $post,
): Response {
// ...
}
} Inne zmiany i nowe funkcjonalności
Oprócz wskazanych usprawnień, PHP 8.5 wycofuje z konstrukcji językowej przestarzałe opcje, uzupełniając równocześnie kod o te bardziej użyteczne.

Wpośród kilkunastu wdrożonych modyfikacji znalazło się też parę ciekawostek.
Oto zatem pozostałe zmiany zaistniałe w PHP 8.5:
- atrybut
#[\Deprecated]– wprowadzony przy okazji 8.4 dla funkcji, metod i stałych klas będzie od teraz obejmował także cechy i stałe globalne; - statyczna asymetryczna widoczność – uwzględniono obsługę funkcji Asymmetric Visibility dla właściwości statycznych;
- dodanie stałej
PHP_BUILD_DATE– pozwala określić dokładną datę i godzinę kompilacji binarki PHP; - atrybut
#[\Override]– od wersji PHP 8.5 może być stosowany do właściwości klas; - nowa klasa
IntlListFormatter– dodana do rozszerzenia Intl formatuje elementy listy zgodnie z lokalnymi regułami (język oraz region); - oznaczanie właściwości jako
final– od danej aktualizacji można tego dokonać bezpośrednio w parametrach konstruktora; - atrybut
#[\DelayedTargetValidation]– będzie wyciszać błędy zaistniałe zbyt wcześnie, tzn. w sytuacji, gdy atrybuty są już weryfikowane, a ich obiekty docelowe nie zostały jeszcze zdefiniowane; - stałe globalne mogą mieć atrybuty – zmiana ta pozwala załączyć dodatkowe metadane przy konfiguracji.
Inne modyfikacje w PHP 8.5:
- dyrektywa
max_memory_limit– ustawia maksymalną, nieprzekraczalną wartość pamięci dla wykonania skryptu. Poprawka ta uniemożliwia obejście jej za pomocą funkcjiini_set(); - nowa flaga
FILTER_THROW_ON_FAILURE– wskazana funkcjonalność spowoduje wyrzucenie wyjątku w sytuacji niepowodzenia walidacji; - polecenie
php --ini=diff– pozwala ustalić, które dyrektywy zostały dodane/różnią się względem domyślnej konfiguracji; - rozszerzenia dla
Intl– aby ustalić, czy wobec istniejących w danym regionie standardów skrypty zapisuje się od prawej do lewej (tyczy się to np. języka arabskiego) uwzględniono funkcjęlocale_is_right_to_leftoraz metodęLocale::isRightToLeft; - parser URI – dostarcza nowy, zgodny ze standardami RFC 3986 i WHATWG URL, sposób obsługi i walidacji adresów URL i URI;
- funkcja
curl_multi_get_handles()dlacURL– umożliwi pobranie tablicy obiektówCurlHandlezCurlMultiHandle; - dodanie funkcjonalności dla
setcookie()isetrawcookie()– od wersji PHP 8.5 obie funkcje obsługują klucz: „Partitioned”. Pozwala on na przechowywanie ciastek w pamięci podręcznej przeglądarki w izolacji, chroniąc dane użytkownika.
Wycofane elementy i uznane za przestarzałe
Wśród dokonanych w PHP 8.5 poprawek nie zabrakło również aspektów z wygasającym wsparciem.
Oto więc dodatkowe elementy, które zostały w PHP 8.5 zdeprecjonowane:
- niestandardowe nazwy rzutowania – takie jak
boolean,integer,doubleczybinaryzostały wycofane. Zamiast nich zaleca się używać odpowiednio:bool,int,floatorazstring; - powtórna deklaracja stałych – nie będzie od wersji PHP 8.5 możliwa;
- metody
__sleep()i__wakeup()– ich miejsce zajmą__serialize()i__unserialize(); - ustawienie INI
disabled_classes– zostało usunięte; - użytek tzw. backticków
`– do realizacji poleceń w powłoce shell nie jest już zalecany; - podanie wartości
nulljako klucza (przesunięcie) tablicy lub wobec wywoływaniaarray_key_exists()– zostało zdeprecjonowane; - wykorzystywanie średnika do zakończenia instrukcji
case– od wydania PHP 8.5 należy używać dwukropka.
Jak ustawić odpowiednią wersję PHP?
Aby dokonać zmiany w tym zakresie wystarczy odznaczyć w panelu hostingu właściwą opcję.
Prześledź kroki zawarte poniżej, aby dowiedzieć się, jak należy to zrobić.
Warto wiedzieć: Pamiętaj, że aktualizacja PHP 8.5 nie oznacza z automatu 100% zgodności z posiadaną architekturą czy systemem plików.
Jednak w razie, gdy napotkasz błędy, zawsze możesz wrócić do wcześniejszych ustawień i działającej wersji.
Krok 1
Gdy zalogujesz się do panelu hostingu zajrzyj do zakładki: „Dodatkowe funkcje” i wybierz z niej odnośnik do: „Select PHP version”.

Krok 2
W sekcji: „Bieżąca wersja PHP” przejdź do rozwijalnej listy i wybierz właściwą opcję. Potwierdź działanie poprzez przycisk: „Ustaw jako bieżącą”.

Podsumowanie
PHP 8.5 to jedna z bardziej użytecznych aktualizacji, zwłaszcza od dużego wydania PHP 8.0, odpowiadającego za pewne rewolucyjne zmiany. Bieżąca wersja nie jest tak znacząca w skutkach, jednak wdraża szereg drobnych, choć istotnych ulepszeń, usprawniających pracę z kodem, przyczyniając się równocześnie do jego łatwiejszego czytania i generowania.
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!
Jeżeli masz jakiekolwiek pytania, skontaktuj się z nami! Kliknij tutaj.
Chcesz dowiedzieć się o nas trochę więcej? Przejdź na stronę JCHost.pl.
