6просмотров
24 ноября 2025 г.
statsScore: 7
Вышел PHP 8.5 — коротко о главных фишках PHP 8.5 официально релизнулся. Версия не «космос переписали», но апдейты реально рабочие и приятные для everyday-кода. Разберём самые полезные штуки с примерами. 1. Pipe-оператор |> — читаемые цепочки Теперь можно писать цепочки вызовов слева направо, без матрёшки из вложенных функций. До:
$title = ' PHP 8.5 Released '; $slug = strtolower( str_replace('.', '', str_replace(' ', '-', trim($title) ) )
); С PHP 8.5:
$title = ' PHP 8.5 Released '; $slug = $title |> trim(...) |> (fn($str) => str_replace(' ', '-', $str)) |> (fn($str) => str_replace('.', '', $str)) |> strtolower(...); // php-85-released Читается по-человечески: сверху вниз, а не «изнутри наружу». 2. Новый URI-экстеншен Появился встроенный URI extension для работы с URL по RFC 3986 и WHATWG. Раньше:
$parts = parse_url('https://php.net/releases/8.5/en.php'); echo $parts['host']; // php.net Теперь:
use Uri\Rfc3986\Uri; $uri = new Uri('https://php.net/releases/8.5/en.php'); echo $uri->getHost(); // php.net
echo $uri->getPath(); // /releases/8.5/en.php Из коробки — нормальный объект для работы с URI. 3. clone($obj, [...]) — clone with для readonly-объектов Теперь можно менять свойства прямо в момент клонирования — удобно для readonly классов и «with-ер» паттерна. 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);
$halfTransparent = $blue->withAlpha(128); Больше не нужно городить get_object_vars() и пересоздавать объект руками. 4. #[\NoDiscard] — не забывай использовать результат Атрибут #[\NoDiscard] заставляет PHP ругнуться, если ты проигнорировал возвращаемое значение, которое важно не терять. #[\NoDiscard]
function getToken(): string
{ return 'secret-token';
} getToken();
// Warning: The return value of function getToken()
// should either be used or intentionally ignored by (void) cast Если хочешь явно проигнорировать: (void) getToken(); Полезно для API, где пропущенный результат = скрытый баг. 5. array_first() и array_last() Наконец-то нормальные функции, чтобы взять первый/последний элемент массива. $events = ['created', 'updated', 'deleted']; $first = array_first($events); // 'created'
$last = array_last($events); // 'deleted' $none = array_last([]); // null Вместо ручного array_key_last() и проверки на пустой массив. 6. Пару приятных бонусов - Стек-трейсы для fatal-ошибок — теперь проще отлавливать, где всё упало. - Persistent cURL share handles — можно переиспользовать соединения между запросами, снижая накладные расходы. - Улучшения с замыканиями и first-class callable в константных выражениях (атрибуты, дефолты параметров и т.д.). Стоит ли обновляться?
- Если у тебя проекты уже живут на 8.x — да, 8.5 выглядит как хороший «quality of life» апдейт:
- pipe-оператор + array_first/last реально упрощают код
- URI-экстеншен и clone with — приятные кирпичики для архитектуры
- больше дебаг-инфы и мелких оптимизаций