Загрузка...

PHP Digest №2 — Июль–август 2026

Свой PHP Digest с блэкджеком и пайпами

Лето закончилось, а значит пора посмотреть, что произошло в PHP за последние два месяца.

Главное событие — начался полноценный цикл релизов PHP 8.6. За июль мы дошли от Alpha 1 до Alpha 3, а в августе появились Beta 1 и Beta 2.

Но одним PHP дело не ограничилось. Laravel получил кучу новых возможностей, на Laracon US представили официальный Laravel LSP, вышел Pest 5, Symfony обзавёлся собственным Language Server, а AI всё сильнее встраивается непосредственно в PHP-экосистему.

Разбираемся, что из этого действительно интересно.

🐘 PHP 8.6 добрался до Beta

2 июля вышла PHP 8.6 Alpha 1, 16 июля — Alpha 2, 30 июля — Alpha 3.

В августе началась следующая стадия:

* 13 августа — PHP 8.6 Beta 1;
* 27 августа — PHP 8.6 Beta 2.

До production ещё далеко. Финальный PHP 8.6 запланирован на 19 ноября 2026 года.

Но набор возможностей языка уже в основном сформирован, поэтому можно посмотреть, что нас ждёт.

Partial Function Application

Одна из самых интересных возможностей PHP 8.6 — частичное применение функций.

Теперь можно сделать так:

$makeSlug = str_replace(' ', '-', ?);

echo $makeSlug('Hello World');

Получим:

Hello-World

Знак ? обозначает аргумент, который будет передан позже.

Особенно интересно это выглядит вместе с pipe operator:

$result = 'Hello World'
    |> str_replace(' ', '-', ?)
    |> strtolower(...);

В результате:

hello-world

PHP постепенно становится удобнее для функционального стиля. Не уверен, что завтра все Laravel-проекты будут состоять из pipeline, но в обработке коллекций, строк и DTO новая возможность вполне может прижиться.

Значения по умолчанию для readonly-свойств

В PHP 8.6 разрешили задавать default value для readonly-свойств:

final class CreateUsersTable
{
    public readonly string $name = 'create_users_table';
}

Раньше подобное было запрещено.

Изменение небольшое, но после появления property hooks и возможности описывать свойства в интерфейсах такое поведение стало вполне логичным.

Новый clamp()

В стандартную библиотеку добавляется clamp().

Он ограничивает значение заданным диапазоном:

clamp(10, min: 0, max: 100);  // 10
clamp(150, min: 0, max: 100); // 100
clamp(-5, min: 0, max: 100);  // 0

Ничего революционного, зато больше не нужно писать:

max(0, min(100, $value));

Причём функция работает не только с числами.

Новый Polling API

PHP 8.6 получает новый API для ожидания событий ввода-вывода.

До этого одним из основных низкоуровневых механизмов был stream_select(). Новый API сможет использовать более подходящие механизмы операционной системы, например epoll или WSAPoll.

Сам по себе PHP от этого не превращается в Node.js и встроенный event loop не получает.

Зато библиотекам вроде Revolt, ReactPHP и другим инструментам для асинхронного PHP потенциально станет проще строить эффективные реализации поверх стандартного API.

SortDirection

Появится встроенный enum:

SortDirection::Ascending;
SortDirection::Descending;

Пока стандартные функции вроде array_multisort() его непосредственно не используют, но сам тип может стать общей основой для библиотек и фреймворков.

Более безопасные настройки сессий

В PHP 8.6 меняются некоторые настройки сессий по умолчанию.

В частности, более безопасные значения получают:

session.use_strict_mode
session.cookie_httponly
session.cookie_samesite

Для новых проектов это хороший плюс: безопасное поведение постепенно становится поведением по умолчанию, а не пунктом из очередной статьи «20 настроек php.ini, которые вы забыли изменить».

🧪 PHP Internals и RFC

С началом beta-цикла PHP 8.6 набор новых возможностей практически сформирован.

Кроме Partial Function Application и readonly defaults, в ветку 8.6 попали оптимизации Closure, улучшения обработки ошибок streams и ограничения на максимальное количество filter chains.

Последнее относится уже не столько к удобству разработчика, сколько к безопасности.

Ещё один интересный RFC предлагал сделать некоторые заранее предсказуемые ошибки выделения памяти перехватываемыми через MemoryError.

Например, операция вроде:

str_repeat('x', PHP_INT_MAX);

сейчас способна закончить выполнение fatal error.

Идея RFC заключается в том, что если PHP заранее знает, что запрошенный размер заведомо невозможен, то логичнее выбросить исключение, которое приложение сможет обработать.

На момент июля RFC ещё находился в Draft.

Не всё из обсуждаемого добралось до языка. Например, предложение добавить pipe assignment operator было отклонено.

И это нормально. PHP Internals традиционно генерирует гораздо больше идей, чем в итоге попадает в язык.

🔐 Релизы PHP и безопасность

Пока PHP 8.6 готовится к релизу, поддерживаемые ветки продолжают получать обновления.

В июле вышли:

* PHP 8.2.32;
* PHP 8.3.32;
* PHP 8.4.23;
* PHP 8.5.8.

30 июля последовала серия security-релизов:

* PHP 8.2.33;
* PHP 8.3.33;
* PHP 8.4.24;
* PHP 8.5.9.

А 27 августа появились PHP 8.4.25 и PHP 8.5.10 с исправлениями ошибок.

Если production до сих пор обновляется по принципу «PHP работает — не трогай», июль был хорошим поводом эту традицию пересмотреть.

Для поддерживаемых веток PHP minor-релизы обычно максимально безболезненны, а security-релизы лучше вообще не откладывать.

🔥 Laravel

Laravel этим летом развивался особенно активно.

Причём интересны не только большие анонсы Laracon, но и обычные минорные релизы Laravel 13.

Встроенная обработка изображений

В Laravel 13.20 появился first-party API для обработки изображений.

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

В Laravel 13.24 возможности расширили: появилась работа с HEIC и определение доминирующего цвета изображения.

Это пригодится для загрузки пользовательских фотографий, каталогов товаров, генерации превью и других стандартных задач.

#[RouteKey]

Laravel 13.21 добавил атрибут #[RouteKey].

Теперь ключ для Route Model Binding можно описывать непосредственно возле модели.

Небольшая вещь, но это продолжение общего движения Laravel в сторону PHP Attributes вместо конфигурации, размазанной по нескольким местам приложения.

#[BindWhen]

Следом Laravel 13.22 получил #[BindWhen] для условных привязок в контейнере.

Через атрибут можно управлять тем, какую реализацию зависимости контейнер должен использовать в определённом контексте.

В сложных приложениях это может заметно упростить DI-конфигурацию.

Monthly logs

В Laravel 13.23 появился monthly log driver.

Теперь можно вращать лог-файлы по месяцам без собственной конфигурации Monolog.

Мелочь, но именно из таких мелочей Laravel обычно и складывается.

Read-through filesystem

Laravel 13.26 получил read-through filesystem driver.

Представим, что файлы проекта лежат в Amazon S3, а мы хотим переехать в Cloudflare R2.

Можно настроить новое хранилище как основное. Новые файлы будут записываться туда сразу, а старые при обращении читаться из прежнего storage и переноситься в новый.

В итоге миграцию большого файлового хранилища можно проводить постепенно, без отдельного многочасового переноса и остановки приложения.

Очень практичная штука.

Очереди

В Laravel 13.25 появилась возможность:

php artisan queue:pause --all

То есть приостановить сразу все очереди.

В 13.26 добавились debounced queued listeners и Queue::forward().

Очереди давно являются одной из сильных сторон Laravel, и их продолжают постепенно допиливать без радикальных изменений API.

whereBinary()

Laravel 13.27 получил:

->whereBinary(...)

Он позволяет выполнять case-sensitive сравнения, например в MySQL.

Там же появился refreshForUpdate() для pessimistic locking и маскирование query bindings в exception messages.

Последнее особенно полезно с точки зрения безопасности: данные запроса не должны случайно улетать в Sentry или production-логи вместе с исключением.

💻 Laravel LSP

Один из главных анонсов Laracon US 2026 — официальный Laravel Language Server.

LSP позволяет редактору понимать Laravel-специфичные конструкции и давать:

* autocomplete;
* навигацию;
* подсказки;
* информацию о моделях;
* понимание routes и других framework-specific вещей.

Главный плюс LSP — независимость от IDE.

То есть качественная поддержка Laravel теперь может появляться не только в PhpStorm или VS Code, но и в Neovim, Zed, Sublime Text и других редакторах с поддержкой Language Server Protocol.

Для PhpStorm это не революция — Laravel Idea уже много лет закрывает большую часть подобных задач.

А вот для пользователей других редакторов официальный LSP действительно важен.

🧪 Pest 5

На Laracon US вышел Pest 5.

И это, пожалуй, один из наиболее интересных релизов Pest за последнее время.

Главная новая возможность — Test Impact Analysis.

Test Impact Analysis

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

На больших проектах разница может быть огромной.

В качестве демонстрации приводился тестовый набор Laravel Cloud из более чем 19 тысяч тестов: выполнение сократилось примерно с трёх минут до нескольких секунд за счёт запуска только затронутых тестов и использования результатов остальных.

Конечно, на обычном проекте с 300 тестами магии такой силы не будет.

Но для больших CI pipeline это очень интересная возможность.

Pest и AI

В Pest 5 появились также инструменты для AI coding agents и evals.

И здесь хорошо видно направление развития всей PHP-экосистемы.

Раньше тесты были нужны разработчику и CI.

Теперь появляется третий потребитель — AI-агент.

Агент меняет код → запускает релевантные тесты → получает результат → исправляет код → проверяет ещё раз.

Для автономной разработки скорость такого цикла становится критичной.

Pest 5 требует PHP 8.4 и PHPUnit 13.

🎼 Symfony

Symfony тоже провёл лето весьма активно.

Symfony 8.0 отправился на пенсию

В конце июля Symfony 8.0 достиг End of Life.

Это ожидаемая часть модели релизов Symfony: чётные minor-версии существуют недолго, а для долгоживущих production-проектов обычно используются LTS-ветки.

Актуальная разработка тем временем сосредоточилась на Symfony 8.1 и будущем 8.2.

Разработка Symfony 8.2

В августе в будущую версию вошло сразу несколько интересных изменений.

Например:

* настройка accessors и mutators через attributes в PropertyInfo;
* улучшения Cache-Control в HttpFoundation;
* callable descriptions для Console attributes;
* параллельная обработка сообщений в Messenger;
* rate-limited transports в Mailer.

Особенно интересно выглядит развитие Messenger.

В PHP всё больше приложений используют очереди и асинхронную обработку как стандартную часть архитектуры, поэтому возможность управлять concurrency непосредственно средствами компонента вполне закономерна.

Symfony Language Tools

17 августа Fabien Potencier представил Symfony Language Tools — официальный Language Server для Symfony.

Он понимает специфичные для Symfony вещи:

* route names;
* service IDs;
* Twig templates;
* translations;
* environment variables;
* YAML-конфигурацию.

Например, IDE сможет заметить ошибку в названии route там, где обычный PHP language server видит просто строку.

Есть completion, hover, navigation, references, rename, diagnostics, quick fixes и code lenses.

Для VS Code есть готовое расширение, Neovim поддерживается через LSP.

Интересно, что практически одновременно свои LSP-инструменты активно развивают и Laravel, и Symfony.

Похоже, хороший framework-aware LSP постепенно становится обязательной частью современной PHP-экосистемы.

Symfony Reprise

В августе вышел Symfony Reprise 1.0.

Проект позиционируется как современное развитие идеи Webpack Encore, но уже для новых frontend bundlers — прежде всего Vite и Rsbuild.

Webpack Encore своё дело сделал, но фронтенд за последние годы заметно изменился. Symfony постепенно адаптирует стандартный frontend workflow под современный tooling.

Symfony AI теперь официальное направление

13 августа был сформирован отдельный Symfony AI Core Team.

Это уже интереснее очередного AI-пакета на GitHub.

Symfony AI вырос более чем до 90 пакетов и интеграций, а в разработке участвовало свыше 160 контрибьюторов.

Фактически Symfony официально закрепляет AI как отдельное направление своей экосистемы.

📦 Composer и Packagist

В июле вышел Composer 2.10.2.

Но интереснее происходящее вокруг безопасности PHP supply chain.

После серии атак на open-source экосистемы Composer и Packagist начали значительно активнее развивать механизмы защиты цепочки поставки.

В Composer 2.10 ещё в конце мая появились native malware filtering и новые dependency policies.

А 7 июля Packagist отдельно рассказал об Immutable Versions.

Идея простая: опубликованная версия пакета не должна внезапно превратиться во что-то другое.

Для экосистемы, где:

composer install

может скачать сотни пакетов и выполнить Composer plugins/scripts, безопасность репозитория зависимостей имеет огромное значение.

Ещё одно июльское событие — запуск официальной программы спонсирования Composer и Packagist.

Проекты используются практически каждым PHP-разработчиком, поэтому дополнительное стабильное финансирование инфраструктуры экосистеме точно не помешает.

📚 Библиотеки и инструменты месяца

За два месяца появилось несколько проектов, которые стоит хотя бы добавить в закладки.

CPX

CPX — Composer Package Executor.

По смыслу это PHP-аналог npx.

Он позволяет запускать CLI-инструменты из Composer-пакетов без необходимости устанавливать их глобально.

Полезно для одноразовых запусков форматтеров, анализаторов и различных dev-tools.

Queue-SQL

Пакет позволяет разбивать массовые SQL update/delete операции на параллельные queue jobs.

Может пригодиться для больших фоновых миграций и обработки крупных таблиц.

Laravel Truss

Инструмент для интерактивной визуализации структуры базы данных Laravel.

Строит ER-диаграммы и позволяет исследовать связи между таблицами.

На больших проектах иногда проще один раз увидеть схему, чем десять минут прыгать по migrations и моделям.

Saga Lara Flow

Реализация durable workflows (устойчивые рабочие процессы) и compensating transactions (компенсирующие транзакции) поверх Laravel Queues.

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

Laravel Doctor

CLI-диагностика Laravel-приложения через Artisan.

Подобные инструменты особенно удобны при работе с чужими или старыми проектами: одной командой можно найти часть типовых проблем конфигурации и структуры.

🛠 PhpStorm 2026.2

Летом вышел PhpStorm 2026.2.

Для PHP-разработчиков появилось несколько полезных вещей.

Добавили поддержку PER Coding Style 3.0, улучшили autocomplete, работу с ArrayShape и управление запуском PHPStan/Laravel Pint.

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

* прямо во время ввода;
* во время простоя IDE;
* при сохранении файла.

Для больших проектов это полезно — PHPStan на каждый введённый символ иногда начинает вести себя как небольшой нагрузочный тест процессора.

Отдельно развивается Laravel support.

В PhpStorm появился Laravel tool window, через который можно смотреть информацию о проекте, запускать Artisan, работать с ошибками и управлять Laravel Cloud.

Но главная тенденция релиза снова связана с AI.

IDE всё больше превращается не просто в редактор с AI-чатом, а в платформу, внутри которой работают coding agents.

🤖 AI для PHP-разработчиков

Если в начале года AI ещё можно было вынести в дополнительный раздел дайджеста, то летом 2026 он уже непосредственно встроился в Laravel и Symfony.

Laravel AI SDK

На Laracon показали сразу несколько новых возможностей Laravel AI SDK.

Одна из наиболее полезных — Human-in-the-Loop.

Теперь выполнение определённых tools агентом можно остановить и запросить подтверждение пользователя.

Например:

AI решил отправить письмо клиенту
        ↓
требуется подтверждение
        ↓
Approve / Deny
        ↓
выполнение

Для реальных AI-агентов это обязательная вещь.

Одно дело — разрешить модели искать данные.

Совсем другое — дать ей возможность самостоятельно удалять записи, отправлять письма или проводить платежи.

Filesystem tools

Laravel AI SDK получил встроенные filesystem tools.

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

Multimodal embeddings

SDK теперь умеет создавать embeddings не только для текста, но также для изображений и аудио.

Это позволяет делать semantic search по медиафайлам, не основываясь только на имени файла или вручную заданных тегах.

OpenAI-compatible providers

Ещё одно полезное изменение — поддержка OpenAI-compatible API.

Это значит, что Laravel AI SDK становится меньше привязан к конкретному провайдеру.

Можно использовать сервисы и локальные шлюзы, которые реализуют совместимый API.

Laravel Boost учится понимать конкретный проект

Интересное направление развивается и в Laravel Boost.

Вместо передачи AI только общей документации Laravel Boost начинает анализировать существующий проект и извлекать его собственные соглашения.

Например:

* как организованы Actions;
* как называются DTO;
* где лежат сервисы;
* какой стиль тестов используется;
* какие архитектурные решения приняты.

Это важный момент.

Проблема AI-кодинга сегодня уже не столько в том, что модель не знает Laravel.

Laravel она знает.

Проблема в том, что она не знает ваш Laravel-проект.

Чем лучше агент понимает локальные conventions, тем меньше после него приходится переделывать код.

🤖 AI + тесты становятся одним процессом

Отдельно интересно посмотреть, как сходятся Laravel Boost и Pest 5.

Laravel уже публикует собственные benchmarks для coding agents. Агент получает Laravel-контекст, выполняет реальную задачу и проверяется настоящими Pest-тестами.

По данным Laravel, современные модели с Boost уже практически полностью проходят существующий набор из 17 benchmark-задач.

Следующая задача — проверять не только:

Работает ли код?
но и:
Написан ли он так, как написал бы нормальный Laravel-разработчик?
И вот это намного интереснее.

Потому что получить зелёный тест можно очень разными способами.

А поддерживать этот код потом всё равно человеку.

🎥 Что посмотреть

Если выбирать одно видео за эти два месяца — я бы начал с Laracon US 2026.

На конференции показали сразу несколько важных вещей:

* Laravel LSP;
* новые возможности Laravel AI SDK;
* Inertia DevTools;
* Managed Queues;
* Laravel Cloud Scale-to-Zero;
* развитие Laravel Boost;
* Pest 5.

Причём многие анонсы уже доступны, а не находятся в состоянии «когда-нибудь сделаем».

Также стоит посмотреть материалы про PHP 8.6 и новый Polling API — особенно если интересны RoadRunner, ReactPHP, Revolt и асинхронный PHP.

📖 Что почитать

Из материалов июля–августа я бы выделил несколько направлений.

What’s new in PHP 8.6 — хороший обзор новых возможностей языка с примерами. Если не хочется читать каждый RFC отдельно, начать проще всего отсюда.

Everything we announced at Laracon US 2026 — концентрированная версия всех основных Laravel-анонсов.

AI coding agents pass tests. Can they write idiomatic Laravel? — интересный материал о том, как Laravel пытается объективно оценивать качество кода, который пишут AI-агенты.

Announcing Symfony Language Tools — стоит посмотреть даже тем, кто использует PhpStorm. Хорошо видно, куда движется tooling современных PHP-фреймворков.

И отдельно рекомендую периодически заглядывать в PHP RFC. До релиза PHP 8.6 осталось несколько месяцев, и уже сейчас понятно, каким будет следующий PHP.

Итоги

Если попробовать свести июль и август к нескольким главным событиям, получится примерно так.

PHP 8.6 сформировался. Beta уже вышла, основные RFC приняты, финальный релиз ждём 19 ноября.

Pest 5 сделал серьёзный шаг вперёд. Test Impact Analysis особенно интересен большим проектам, а интеграция с AI agents показывает, куда движется тестирование.

Laravel продолжает быстро наращивать возможности. Images, filesystem, очереди, новые attributes, LSP — даже обычные минорные релизы Laravel 13 приносят довольно много полезного.

Symfony тоже получил собственный LSP и продолжает подготовку Symfony 8.2.

AI окончательно перестал быть отдельной игрушкой. Laravel AI SDK, Boost, Symfony AI, AI-инструменты Pest и IDE уже образуют нормальную инфраструктуру вокруг PHP-разработки.

И мне кажется, именно это главное изменение последних месяцев.

Год назад основной вопрос звучал примерно так: «Какой AI лучше пишет PHP?»

Сейчас вопрос уже другой: как дать агенту контекст проекта, как проверить написанный им код, как ограничить его действия и как встроить всё это в обычный процесс разработки.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *