Релиз PHP 8.5: оператор Pipe, модуль URI и новый синтаксис clone
20 ноября 2025 года команда разработчиков PHP официально представила релиз PHP 8.5. Это обновление языка включает несколько значительных новшеств: встроенный модуль для безопасной работы с URI и URL, оператор последовательной передачи данных и расширенный синтаксис для клонирования объектов.
Оператор Pipe (|>)
Главное синтаксическое изменение - оператор Pipe (|>). Он позволяет выстраивать цепочки вызовов функций слева направо, передавая результат предыдущего выражения как единственный аргумент следующей функции. Такой подход заменяет вложенные конструкции, которые приходилось читать изнутри наружу, на линейные последовательности. Код становится более плоским и понятным, особенно при обработке данных через несколько преобразований. Под капотом оператор компилируется в те же вложенные вызовы, но в исходном коде цепочка читается как последовательный алгоритм.
Встроенный модуль URI
До PHP 8.5 для разбора URL разработчики полагались на функцию parse_url(), которая имела ограничения и не всегда корректно обрабатывала сложные случаи. Новая версия включает постоянно доступное URI-расширение, предоставляющее унифицированный API для безопасного анализа, нормализации и модификации URI и URL. Расширение построено на библиотеках uriparser и Lexbor и поддерживает одновременно два стандарта: RFC 3986 и WHATWG URL. Вместо разбора строки на массив компонентов теперь можно создать объект URI и работать с ним через методы, например getHost(). Это гарантирует строгое соответствие стандартам и избавляет от ошибок, связанных с ручной обработкой адресов.
Clone With
В PHP 8.5 ключевое слово clone изменило поведение. Теперь оно работает как функция, принимающая второй аргумент — ассоциативный массив со значениями свойств для обновления. Это позволяет клонировать объект и изменять его свойства в одном выражении: clone ($obj, ['prop' => value]). Особую ценность нововведение представляет для классов с readonly-свойствами: оно упрощает реализацию паттерна "with-er", при котором создаются копии объектов с небольшими изменениями, без написания шаблонного кода.
Дополнительные улучшения
Релиз включает атрибут #[\NoDiscard], который предупреждает, если возвращаемое значение функции не используется, помогая предотвращать логические ошибки. Появились встроенные функции array_first() и array_last() для получения первого и последнего элементов массива. Добавлена поддержка статических замыканий и first-class callables в константных выражениях. Улучшена отладка: фатальные ошибки теперь сопровождаются полным стек-трейсом. Введены постоянные cURL-хендлы, которые сохраняются между запросами и снижают накладные расходы на инициализацию соединений.