PHP 8.5 - что нового

PHP 8.5 был официально выпущен 20 ноября 2025 года.

Главные новшества - это улучшения синтаксиса, новые API, удобства для разработчиков, а также улучшения в области отладки и совместимости.


Ключевые обновления и примеры

URI-расширение

Теперь PHP имеет встроенное расширение для работы с URI/URL. Оно позволяет надёжно парсить, нормализовать и модифицировать URL в соответствии со стандартами RFC 3986 и WHATWG URL.

use Uri\Rfc3986\Uri;

$uri = new Uri('https://php.net/releases/8.5/en.php');
echo $uri->getHost(); // php.net

Это даёт более надёжный и современный способ работы с URL по сравнению с устаревшим parse_url()


Оператор Pipe (|>)

Введён новый оператор |>, который позволяет "протягивать" результат одного вызова в следующий. Как в функциональном стиле слева-направо, читаемо и без лишних временных переменных.

$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"

Такой подход особенно удобен, когда нужно последовательно применять несколько преобразований к данным.


Clone-with: клонирование с изменением свойств

Теперь возможно клонировать объект и одновременно менять некоторые его свойства с помощью новой формы clone(). Это удобно, например, для readonly классов.

readonly class Color
{
    public function __construct(
        public int $red,
        public int $green,
        public int $blue,
        public int $alpha = 255,
    ) {}
}

$blue = new Color(79, 91, 147);
$transparentBlue = clone($blue, ['alpha' => 128]);

Раньше приходилось вручную создавать новый объект. Cейчас это стало гораздо проще и чище.


Новый атрибут #[\NoDiscard]

Добавив атрибут #[\NoDiscard] к функции, PHP теперь может предупреждать, если её возвращаемое значение было проигнорировано. Это помогает избежать ошибок, когда важно использовать результат.

#[\NoDiscard]
function getPhpVersion(): string
{
    return 'PHP 8.5';
}

getPhpVersion(); // ⚠️ Warning: The return value of function getPhpVersion() should be used

Если ты намеренно игнорируешь возвращаемое значение, можно добавить приведение к (void) . Тогда предупреждения не будет.


Дополнительные улучшения

Помимо крупных нововведений, PHP 8.5 содержит и множество мелких, но полезных улучшений:

  • Возможность использовать замыкания (closures) и first-class callable в константных выражениях, например, как параметры атрибутов.

  • Поддержка постоянных cURL share-дескрипторов - дескрипторы могут сохраняться между разными запросами PHP, что экономит ресурсы при повторных запросах к одним и тем же хостам.

  • Новые функции: array_first(), array_last() - для лёгкого получения первого и последнего элемента массива.

  • Функция для работы с RTL-локалями: locale_is_right_to_left() и Locale::isRightToLeft() - удобно для приложений, поддерживающих языки с письмом справа-налево.

  • Команда CLI php --ini=diff - показывает только те INI-настройки, которые отличаются от значений по умолчанию. Это облегчает аудит конфигурации.

  • Добавлены функции get_error_handler() и get_exception_handler() для получения текущих установленных обработчиков ошибок и исключений.

  • Теперь fatal-ошибки содержат backtrace (стек вызовов) - это облегчает отладку критических сбоев.

  • Новый констант PHP_BUILD_DATE полезен для логов, диагностики и отслеживания, когда и как была собрана версия PHP.


Обратная совместимость и устаревшие возможности

При обновлении на PHP 8.5 стоит учитывать и удалённые/устаревшие функции:

  • Псевдоним обратного апострофа (`) для shell_exec() больше не поддерживаются и нужно использовать явный shell_exec().

  • Устарели неканонические имена типов (boolean), (integer), (double), (binary) - вместо них нужно использовать (bool), (int), (float), (string).

  • Удалена настройка disable_classes, так как она приводила к проблемам в движке.

  • Операторы case больше нельзя завершать точкой с запятой вместо двоеточия.

  • Использование null в качестве смещения массива или в array_key_exists() теперь объявлено устаревшим.

Если вы переходите с более старых версий рекомендуется внимательно изучить раздел миграции, чтобы избежать проблем.


Почему это важно

Обновление до PHP 8.5 приносит не просто новые "плюшки", а значительные улучшения для разработчиков:

  • Более чистый, читаемый и современный синтаксис (pipe-оператор, clone-with, first-class callable) сокращает boilerplate и упрощает код.

  • Новые утилиты (URI-парсинг, array_helpers, locale-функции) экономят время и снижают вероятность ошибок.

  • Улучшения для отладки и устойчивости (backtrace при fatal, управление ошибками, стабильные cURL-дескрипторы) повышают надёжность приложений.

  • Общая модернизация и упрощение - PHP становится удобнее для написания чистого, безопасного и поддерживаемого кода.

Комментарии (0)

Войдите, чтобы оставить комментарий

Похожие статьи

Как установить Docker и Docker Compose на Ubuntu и RedHat системы (2025)

Подробная инструкция по установке Docker и Docker Compose на Debian-based и RedHat-based системы. Разбор всех команд по шагам, настройка GPG-ключей, добавление репозиториев, запуск сервиса, проверка и устранение типичных ошибок.

1 0 2 мин