Новата версия на PHP 8.5 излезе официално на 20 ноември 2025 г. Тази версия въвежда набор от вълнуващи нови функционалности, наред с някои малки промени и деприкации. В тази статия ще разгледаме най-важните промени, които Ви очакват, за да се подготвите за следващата версия на PHP.
Поддръжка на версии
На първо място, нека видим графиките за продължителността на живот на различните PHP версии.


Нововъведения
PHP 8.5 носи няколко забележителни допълнения, имащи за цел да подобрят четимостта на кода, възможностите за отстраняване на грешки и цялостното изживяване за разработчиците.
Всички сме тук за едно нещо. Знаем какво е. За това нека пристъпим директно към него.
Pipe оператор (|>)
Една от най-очакваните функции в PHP 8.5 е въвеждането на pipe оператора (|>). Той позволява последователно изпълнение на множество функции, като върнатата стойност на предходната се подава като първи аргумент на следващата. Въпреки че не въвежда нови езикови възможности, операторът може значително да подобри четимостта на кода.
Пример:
$result = "Hello World"
|> strtoupper(...)
|> str_shuffle(...)
|> trim(...);
// Примерен изход: "LWHO LDLROE" (ще варира заради str_shuffle)
Това е същото като:
$result = trim(str_shuffle(strtoupper("Hello World")));
Операторът за поток работи с всяка извикваема функция (потребителски функции, вградени функции, статични методи, closures и т.н.), но изисква всяка извикваема функция във веригата да приема точно един параметър, който ще бъде подадената стойност. Функции, очакващи параметри по референция, обикновено не могат да се използват, с някои изключения за вградени функции, използващи @prefer-ref.
Нова INI директива max_memory_limit
PHP 8.5 въвежда нова INI директива max_memory_limit, която позволява да зададете горна граница за директивата memory_limit. Това осигурява допълнителен слой контрол, например в споделен хостинг, където memory_limit може да бъде зададена от отделни приложения, но е желателно да има максимална системна граница. Това е така, защото max_memory_limit е INI_SYSTEM директива и не може да се променя от кода.
Например, ако memory_limit е зададен на 256M в скрипт или .ini файл, но max_memory_limit е 128M, ефективната граница на паметта ще бъде 128M.
Нови функции array_first и array_last
Надграждайки функциите за работа с масиви, въведени в PHP 8.4, PHP 8.5 добавя array_first() и array_last(). Тези функции предоставят удобни начини за извличане на първия или последния елемент на масив.
- array_first(array $array): mixed – Връща първия елемент на масива.
- array_last(array $array): mixed – Връща последния елемент на масива.
Пример:
$myArray = [10, 20, 30, 40];
echo array_first($myArray); // Извежда: 10
echo array_last($myArray); // Извежда: 40
Поддръжка за Stack Trace за фатални PHP грешки
Отстраняването на фатални грешки в PHP може да бъде предизвикателно поради липсата на подробна информация. PHP 8.5 решава този проблем, като добавя проследяване на стека (Stack Trace) за фатални PHP грешки. Това означава, че когато възникне такава, ще бъде предоставено изчерпателно проследяване на стека, което да улесни намирането на причината за грешката.
Нови функции get_exception_handler и get_error_handler
За да допълни съществуващите функции set_exception_handler() и set_error_handler(), PHP 8.5 добавя get_exception_handler() и get_error_handler(). Тези функции позволяват на програмиста да извлича текущо активните exception и error обработващи функции.
$currentExceptionHandler = get_exception_handler();
$currentErrorHandler = get_error_handler();
Нова константа PHP_BUILD_DATE
В PHP 8.5 получаваме нова константа PHP_BUILD_DATE. Тя ще съдържа датата и часа, когато бинарният PHP файл е бил създаден. Форматът ще бъде "M j Y H:i:s". Например: "2025-Nov-20".
CLI: php --ini=diff за извеждане на INI директиви, различни от стандартните
PHP CLI получава нова опция: php --ini=diff. Когато бъде използвана, тази команда ще изведе само директивите, които са с различна стойност от тяхната стандартна. Това може да бъде от полза за бърз одит на PHP конфигурациите.
Intl: Нов клас IntlListFormatter
Разширението Intl въвежда класа IntlListFormatter. Този клас предоставя стандартизиран начин за форматиране на списъци според правила, специфични за локализацията. Той може да форматира списъци със съюзи ("и", "или") или разделители, което улеснява локализацията на потребителски интерфейси.
Пример:
$formatter = new IntlListFormatter('en_US', IntlListFormatter::TYPE_AND);
echo $formatter->format(['Apple', 'Banana', 'Orange']);
// Очакван изход: "Apple, Banana, and Orange"
Curl: Нова функция curl_multi_get_handles
Разширението Curl има нова функция curl_multi_get_handles(). Тя Ви показва всички cURL handles, които в момента са част от cURL multi-handle. Това осигурява по-голям контрол върху текущите cURL операции.
Нови функции locale_is_right_to_left и Locale::isRightToLeft
За по-добро управление на интернационализацията и локализацията, PHP 8.5 въвежда locale_is_right_to_left() и Locale::isRightToLeft(). Тези функции Ви позволяват да определите дали даден език използва система за писане отдясно наляво (напр: арабски или иврит). Това е от важно значение за правилното показване на текст, изработка на потребителски интерфейс и осигуряване на подходящо изживяване за потребителите по целия свят.
Locale::isRightToLeft('ar-SA'); // true
locale_is_right_to_left('en-US'); // false

Отхвърлени функционалности (Deprecations)
Както при всяка нова PHP версия, някои по-стари функционалности са отхвърлени, за да проправят път за бъдещи подобрения и да премахнат остарели практики.
Всички константи MHASH_* са отхвърлени
Константите MHASH_*, използвани с разширението mhash, вече са отхвърлени. Самото разширение до голяма степен е изместено от Hash, което предоставя по-модерен и изчерпателен брой хеширащи алгоритми. Разработчиците трябва да мигрират към използване на Hash.
Неканоничните скаларни преобразувания на типове (boolean|double|integer|binary) са отхвърлени
Използването на неканонични скаларни преобразувания на типове, като (boolean), (double), (integer) и (binary), вече са отхвърлени. Разработчиците трябва да използват техните канонични еквиваленти: (bool), (float), (int) и (string) (за binary). Тази промяна насърчава последователност и яснота при преобразуване на типове.
// Отхвърлено
$value = (integer) '123';
// Препоръчително
$value = (int) '123';
Връщане на стойности, които не са от тип string от User Output Handler е отхвърлено
При използване на ob_start() и предоставяне на callback като output handler, връщането на стойности, които не са от тип string от тази функция вече е отхвърлено. Очаква се handler-ите да връщат string, който след това ще бъде допълнително обработен или изпратен до браузъра. Връщането на други типове може да доведе до неочаквано поведение и ще се счита за грешка в бъдещи версии.
ob_start(
static function(string $buffer, int $phase) {
return [];
}
);
echo "test";
// Deprecated: Returning a non-string result from user output handler {closure:...} is deprecated in ... on line ...
Извеждането на изход от User Output Handler е отхвърлено
Подобно на предишното отхвърляне, извеждането на изход директно от User Output Handler (например: използване на echo или print) вече е отхвърлено.
ob_start(
static function(string $buffer, int $phase): string {
echo "test"; // Emits output, deprecated, output still hidden
return ($buffer);
}
);
echo "test";
ob_end_flush();
// Deprecated: ob_end_flush(): Producing output from user output handler ... is deprecated in ... on line ...
Заключение
PHP 8.5 продължава традицията за подобряване на езика с функции, които повишават производителността на разработчиците, качеството на кода и производителността на приложенията. Операторът pipe и подобреното отстраняване на грешки са особено вълнуващи. Въпреки че някои отхвърлени функционалности изискват внимание при надграждане, тези промени в крайна сметка водят до по-здрава и модерна PHP екосистема. Както винаги, препоръчително е да се тества осърдно с новата версия, преди да се качи на продукционна среда. Можете да посетите страниците с информация за PHP 8.5, новите издания и поддържаните версии.