Стаття також доступна російською (перейти до перегляду).

Зміст:
- Нововведення
- Застарілі елементи (depricated) / операції
- Продуктивність
- Модулі / Драйвери
- PHP 8.5 вже доступний на хостингу FREEhost.UA
Нова версія PHP 8.5 стала одним із найбільш практично орієнтованих оновлень за останні роки. Основний фокус зроблено на покращенні продуктивності, впорядкуванні синтаксису та спрощенні повсякденних задач розробника. У релізі з’явилися нові механізми роботи з константними виразами, покращена типізація, оновлений підхід до клонування об’єктів, сучасний pipe-оператор для побудови ланцюжків викликів, а також реалізовано WHATWG-сумісне URL-API. Крім цього, оптимізовані внутрішні модулі та прискорена робота FPM, Date, DOM та Standard-компонентів.
PHP 8.5 не змінює мову радикально, але суттєво полегшує написання чистого, зрозумілого та підтримуваного коду, а також демонструє відчутний приріст продуктивності у реальних веб-застосунках. Це робить нову версію логічним та безпечним кроком для оновлення на сучасних проєктах.
Нововведення
Додано новий атрибут #[\NoDiscard] та пов'язане з ним приведення типу (void). Атрибут може використовуватися для маркування функцій, повертаєме значення котрих є обов’язковим до використання. Нове приведення типу дозволяє вказати, що значення навмисно не застосовується.
З'явилися нові функції для отримання результатів обробки виключень та помилок. Функції get_exception_handler() та get_error_handler() дають можливість визначати функції із обробниками виключень та помилок.
З'явилася підтримка приведення типів для виразів із константами.
Додано оператор конвейєру |> (pipe). Особливою новинкою PHP 8.5 став оператор конвеєрної передачі |> (pipe).
Він дозволяє передавати результат виразу або функції (зліва) у наступну дію (праворуч), утворюючи послідовний ланцюжок обробки даних.
Приклад базового використання:
$result = " Some String "
|> trim(...)
|> strtolower(...)
|> htmlspecialchars(...);
Такий запис замінює собою вкладені виклики функцій, усуває необхідність створювати тимчасові змінні та значно покращує читабельність коду.
Переваги pipe-оператора:
• спрощення складних послідовностей перетворення даних;
• зменшення вкладеності та «матрьошок» із функцій;
• відсутність проміжних змінних → менше «сміття» у просторі імен;
• можливість застосовувати послідовні перетворення всередині одного виразу,
зокрема в match(), де це раніше було неможливо;
• ліпша сумісність із функціональним стилем програмування та middleware-підходом;
• підвищення читабельності при формуванні pipeline-логіки у DDD, API-фільтрації,
обробці вхідних даних, підготовці запитів тощо.
Pipe-оператор у PHP 8.5 — це не просто синтаксичний цукор, а реальний інструмент
спрощення типових повсякденних задач.
Додано атрибут #[\DelayedTargetValidation]. Це дозволяє перенести обробку помилок декотрих внутрішніх атрибутів на етап виконання коду, прискоривши цим процес компіляції, зокрема, у середовищі UNIX-систем.
З’явилася підтримка налаштувань parse_url() для FTP/FTPS та SSL/TLS. Це дозволяє використовувати оболонку потоку FTP/FTPS для під'єднання до URL, перейменовувати файли та відслідковувати заголовки Location. Також дає змогу використати зв'язок через SSL/TLS-сокети для парсінгу цільового URL.
З’явилася нова глобальна константа із назвою PHP_BUILD_PROVIDER. Константа містить змінну з однойменною назвою та використовується лише разом з нею. Змінна застосовується на етапі збірки для додавання контексту про постачальника. Перед декларуванням константи, спочатку повинна бути встановлена змінна із довільним значенням. В іншому випадку константа не декларується.
Приклад:
./newstructure + export PHP_BUILD_PROVIDER="New Value" // Встановлення змінної ./addstruct ... // Виклик скрипта make make install echo PHP_BUILD_PROVIDER; // "New Value"
З’явилася нова константа із назвою PHP_BUILD_DATE. Константа використовується для фіксації дати та часу збірки файлу, що виконується, та подальшого їх витягу при потребі, наприклад, із тіла коду. Раніше це можна було зробити лише за допомогою функції phpinfo(), що ускладнювало завдання з-за необхідності подальшого перетворення отриманих даних у потрібний формат. Зараз це можна зробити напряму.
Приклад:
echo PHP_BUILD_DATE; // Nov 28 2025 16:12:00
З’явилася підтримка викликів для об'єктів першого класу та статичних замикань в константних виразах. Такі вирази можуть включати не лише константи, а й стандартні значення параметрів та властивості об'єктів.
З’явилася підтримка зворотного трасування для фатальних помилок.
Додана підтримка clone-with для функції клонуванняоб'єктів clone(). Вона дозволяє створити копію об’єкта та одразу змінити частину його властивостей.
Це особливо корисно для класів із readonly-властивостями та загалом для підходу, що базується на незмінюваних (immutable) структурах даних.
Пример использования:
class User {
public function __construct(
public readonly string $name,
public readonly int $age,
) {}
}
$updated = $user clone with { age: 35 };
Конструкція clone with:
• підтримує ідею незмінюваності (immutability) без додаткових фабрик чи builder-класів;
• мінімізує шаблонний код у DTO та Value Object;
• дозволяє оновлювати лише необхідні властивості, не створюючи новий конструктор;
• робить патерн “with-er” нативним для мови;
• корисна при роботі з конфігураціями, налаштуваннями, Entity-снапшотами, DTO у сервісах.
Це одне з найпрактичніших оновлень 8.5, яке значно спрощує роботу з об’єктами, особливо в DDD-архітектурі.
Додані API, котрі сумісні із WHATWG URL таспецифікацією RFC 3986. API використовуються для обробки та аналізу URL.
З’явилася підтримка операції final для властивостей конструктору. Це дозволяє маркувати властивості, як остаточні.
Виправлення / покращення
Вивід AST для замикання, котре негайно викликається.
Обробка _debugInfo(), що повертає посилання на масив.
Помилки GH-16198, 15753, 20113, 20183, 17951, 20177, 19844, 20002, 19765, 19352, 19823, 19839, 19480, 19823, 19934, 19719, 19679, 19613, 18850, 19681, 19081, 19476, 18033, 17959, 19548, 18026, 19544, 19305, 18373, 19326, 19306, 16665.
-
Помилки OSS-Fuzz № 447521098, 427814452
Помилка hard_timeout при використанні із опцією --enable-zend-max-execution-timers.
Покращено повідомленняпро помилку UnhandledMatchError для значення zend.exception_string_param_max_len=0.
Елемент clone() став функцією.
Застарілі елементи (depricated) / операції
-
Директиви INI report_memleaks та INI disable_classes (видалена).
-
Змінна $http_response_header.
-
Інкремент нечислових строчок Girgias.
-
Всі операції та складнощі, пов'язані із прив'язуванням замикань.
-
Операція повторного декларування констант.
-
Виведення із строчок запиту $_SERVER['argv'] та $_SERVER['argc'].
-
Неканонічні імена integer, binary, boolean та double.
-
Використання значення null при виклику array_key_exists() та як зміщення масиву.
Продуктивність
PHP 8.5 демонструє покращення продуктивності порівняно з 8.4 завдяки оптимізації ядра препроцесора, удосконаленню роботи з константними виразами, переробленим механізмам обробки замикань та оновленим внутрішнім алгоритмам FPM, Date і DOM.
За попередніми тестами, у типових веб-застосунках приріст швидкодії становить 5–10% залежно від сценарію використання. Зменшення кількості тимчасових змінних завдяки pipe-оператору також позитивно впливає на роботу менеджера пам’яті, що у високонавантажених середовищах дає відчутний виграш.
Також покращено продуктивність:
• парсингу та обробки URL через новий WHATWG-сумісний модуль;
• роботи FPM у сценаріях з великим обсягом логування;
• багатьох внутрішніх операцій Standard, Date, DOM через оптимізацію C-ядра.
PHP 8.5 ідеально підходить для проєктів, де критично важлива швидкість відповіді,
ефективне використання ресурсів і стабільність роботи під навантаженням.
Модулі / Драйвери
COM:
Виправлені виклики методів та доступ до об'єктів, котрі мають тип variant.
Curl:
-
Додана функція curl_share_init_persistent(), котра дає можливість зберігати дескриптори для запитів PHP та використовувати їх повторно у випадку однакового набору параметрів. Це дозволить уникнути повторної ініціалізації дескрипторів при кожному запиті та, відповідно, оптимізувати витрати ресурсів;
-
Додана функція curl_multi_get_handles(), котра повертає масив із вказівниками на всі прості дескриптори, котри були додані раніше;
-
З’явилася підтримка CURLOPT_SSL_SIGNATURE_ALGORITHMS;
-
До curl_getinfo добавлена ??поддержка CURLINFO_HTTPAUTH_USED, CURLINFO_USED_PROXYдаCURLINFO_PROXYAUTH_USED;
-
До curl_getinfo()добавлена ??поддержка CURLINFO_QUEUE_TIME_T;
-
Функції curl_close() да curl_share_close() помічені як застарілі.
Date:
-
Виправлені поведінкові негаразди, пов'язані із переповненням цілих чисел;
-
Виправлена помилка GH-17159;
-
Виправлені функції date_sunset() та date_sunrise() зі зміщенням UTC на часткову годину.
DOM:
-
Додані Dot-елементи insertAdjacentHTML(), getElementsByClassName() та $outerHTML;
-
Налагоджений процес перевірки простору імен getNamedItemNS();
-
Виправлена помилка, котра виникала під час клонування колекцій DOM-вузлів, карт та списків;
-
Виправлена помилка GH-18877.
FPM:
-
З'явилася можливість встановлення обмежень журналу доступу FPM за допомогою log_limit;
-
Виправлені помилки GH-8157, 17645, 19989 та 19817.
ODBC
Видалені ODBC OVER та прапорці збірки, котрі є специфічними для драйверу.
OpenSSL:
-
Доданий INI-файліз назвою openssl.libctx, котрий дозволяє обирати різновид контексту OpenSSL-бібліотеки та перетворювати частини розширення для використання бібліотеки libctx;
-
До функцій openssl_private_decrypt() та openssl_public_encrypt() додана опція $digest_algo;
-
Виправлена збірка, отримана при застосуванні опції --with-openssl-legacy-provider;
-
Виправлені помилки GH-19369, 19994;
-
Опція $key_length для openssl_pkey_derive() є застарілою.
Standard:
-
З’явилися нові функції array_first() та array_last(), котрі повертають перше та, відповідно, останнє значення масиву;
-
З’явилися підтримка секціонованих файлів cookie;
-
Покращена робота функцій html_entity_decode, array_chunk() та pack();
-
Виправлені помилки у обробці коду команди sendmail.
URI:
З'явився новий модуль, котрий надає API для можливості проведення аналізу та обробки URL-адрес за правилами, визначеними у стандартах WHATWG URL та RFC 3986.
Приклад використання:
use Uri\Rfc3986\Uri;
$uri = new Uri('https://example.com/news/1825/news1.php');
var_dump($uri->getHost());
// string(7) "example.com"
PHP 8.5 вже доступний на хостингу FREEhost.UA
Ви можете обрати цю версію у налаштуваннях свого хостинг-аккаунта та протестувати. Нові можливості без додаткової конфігурації. Ми підтримуємо найактуальніші версії PHP відразу після появи стабільних збірок, щоб забезпечити нашим клієнтам. Максимальну продуктивність та безпеку. Спробувати хостинг з PHP 8.5
Підписуйтесь на наш телеграм-канал https://t.me/freehostua, щоб бути в курсі нових корисних матеріалів.
Дивіться наш канал Youtube на https://www.youtube.com/freehostua.
Ми у чомусь помилилися, чи щось пропустили?
Напишіть про це у коментарях, ми з задоволенням відповімо та обговоримо Ваші зауваження та пропозиції.
|
Дата: 02.12.2025 Автор: Олександр Ровник
|
|

Авторам статті важлива Ваша думка. Будемо раді його обговорити з Вами:
comments powered by Disqus