155просмотров
20 ноября 2025 г.
stats📷 ФотоScore: 171
🎉 PHP 8.5 официально вышел! Сегодня у нас маленький профессиональный праздник: стабильный релиз PHP 8.5 уже здесь, и язык снова стал сильнее, чище и удобнее. 🧩 Основные новинки 🔄 Оператор «pipe» (|>)
В PHP 8.5 добавлен оператор pipe, который позволяет удобно передавать результат одной функции в другую вместо вложенных вызовов. $output = $input |> trim(...) |> (fn (string $s) => str_replace(' ', '-', $s)) |> (fn (string $s) => str_replace(['.', '/', '…'], '', $s)) |> strtolower(...); Таким образом код становится более читаемым и линейным. 📦 clone с модификацией (clone …, […])
Появилась возможность клонировать объект и одновременно задавать новые значения для свойств: return clone($this, [ 'title' => $title,
]); Это помогает писать более иммутабельный код (или хотя бы приближаться к нему). 📝 Атрибут #[NoDiscard] и (void)-каст
Функциям теперь можно добавлять атрибут #[NoDiscard("…")], что заставляет предупреждать, если их возвращаемое значение не используется. Если нужно явно проигнорировать результат — используется (void): (void) foo(); 🧠 Улучшения замыканий и first-class-callables
Теперь выражения замыканий (closures) и first-class-callables могут использоваться в константных выражениях, что открывает новые возможности для атрибутов и метапрограммирования. Вот такую монстрятину можно будет писать: #[SkipDiscovery(static function (Container $container): bool { return ! $container->get(Application::class) instanceof ConsoleApplication;
})]
final class BlogPostEventHandlers 🧵 Бэктрейсы для фатальных ошибок
Фатальные ошибки теперь сопровождаются полноценным стэктрейсом — помогает быстрее находить причину. 🔍 array_first() и array_last()
Добавлены функции, позволяющие получать первый и последний элемент массива. Ваши хелперы, которые делают тоже самое стали «велосипедами». 🌐 Новый парсер URI/URL
Встроен новый модуль для работы с URI: $uri = new Uri('https://example.com/path');
$uri->getHost();
$uri->getScheme(); 🧩 Отложенная валидация атрибутов: #[DelayedTargetValidation]
Этот новый атрибут позволяет переносить проверку целевого типа атрибута на более поздний этап, что особенно полезно в больших проектах со сложной архитектурой, циклическими зависимостями или ранней загрузкой классов. 🛠 Мелкие, но полезные изменения • Поддержка асимметричной видимости (asymmetric visibility) для статических свойств. • Возможность применять атрибуты к неклассовым константам (compile-time non-class constants). • В конструкторном свойстве (property promotion) теперь можно указывать final-свойства. • Атрибут #[\Override] теперь может применяться также к свойствам. • Добавлено свойство Dom\Element::$outerHTML. • Расширение EXIF теперь поддерживает форматы HEIF и HEIC. • При фильтрации с помощью filter_var() добавлен флаг FILTER_THROW_ON_FAILURE. • Командная опция php --ini=diff показывает отличия от стандартных INI-настроек. • Новые функции: get_error_handler() и get_exception_handler() для получения текущих обработчиков ошибок и исключений. • Добавлена константа PHP_BUILD_PROVIDER (для информации о сборке). ⚠️ Депрекации • Неканоничные названия кастов (boolean|double|integer|binary) объявлены устаревшими. • Использование обратных кавычек (cmd) как алиаса для shell_exec() — устарело. • Повторное объявление констант теперь считается устаревшим. • Директива disabled_classes в php.ini удалена. ⸻ 🙂 Не забудьте подписаться на канал «Кофе, код и консоль» — обещаю больше таких обзоров с мемами и комментариями.
📤 А если пост был полезен — поделитесь им: пусть ваши коллеги не отстают от PHP! #php #webdev #backend #DevOps #кодирование