PHP в 2026
Если коротко: PHP не стагнирует. Он аккуратно, но системно взрослеет — и в 2026 это особенно заметно.
PHP 8.5
Релиз без «вау-революций», но с полезными доработками: pipe-operator, клонирование объектов с модификацией, улучшения замыканий, нормальные stack trace даже для fatal error. Это не хайп, а качество жизни.
Partial Function Application → PHP 8.6
Вот здесь начинается магия. PFA раскрывает pipe-operator по-настоящему: меньше анонимных функций, больше читаемого функционального кода. PHP медленно, но уверенно учится декларативности — и это хороший знак.
Pattern Matching (RFC)
Пока в обсуждении, но потенциал огромный. Более выразимые match-конструкции и
FrankenPHP
Кандидат на будущее PHP-рантайма по умолчанию. Drop-in замена PHP-FPM, +10% производительности «из коробки», worker-mode, бинарные сборки, современный HTTP. Без боли — с профитом.
Mago
Линтер, форматтер и статический анализатор на Rust. Быстро. Строго. Практично. Пример того, как экосистема учится у других языков.
Async PHP / TrueAsync
Сложно, долго, но перспективно. Пока фокус на CPU-тасках и потоках, но если дойдём до удобного async I/O — PHP сильно выиграет в серверных сценариях.
PHPverse — возвращается в 2026
Онлайн-конфа показала, что комьюнити живо и массово. Это важно.
Tempest
Новый взгляд на PHP-фреймворки: современная архитектура, активное OSS-сообщество, третий мажорный релиз на подходе.
🔗 Ссылка на статью
Библиотека пхпшника
Если коротко: PHP не стагнирует. Он аккуратно, но системно взрослеет — и в 2026 это особенно заметно.
PHP 8.5
Релиз без «вау-революций», но с полезными доработками: pipe-operator, клонирование объектов с модификацией, улучшения замыканий, нормальные stack trace даже для fatal error. Это не хайп, а качество жизни.
Partial Function Application → PHP 8.6
Вот здесь начинается магия. PFA раскрывает pipe-operator по-настоящему: меньше анонимных функций, больше читаемого функционального кода. PHP медленно, но уверенно учится декларативности — и это хороший знак.
Pattern Matching (RFC)
Пока в обсуждении, но потенциал огромный. Более выразимые match-конструкции и
is-проверки — шаг к более строгому и понятному коду.FrankenPHP
Кандидат на будущее PHP-рантайма по умолчанию. Drop-in замена PHP-FPM, +10% производительности «из коробки», worker-mode, бинарные сборки, современный HTTP. Без боли — с профитом.
Mago
Линтер, форматтер и статический анализатор на Rust. Быстро. Строго. Практично. Пример того, как экосистема учится у других языков.
Async PHP / TrueAsync
Сложно, долго, но перспективно. Пока фокус на CPU-тасках и потоках, но если дойдём до удобного async I/O — PHP сильно выиграет в серверных сценариях.
PHPverse — возвращается в 2026
Онлайн-конфа показала, что комьюнити живо и массово. Это важно.
Tempest
Новый взгляд на PHP-фреймворки: современная архитектура, активное OSS-сообщество, третий мажорный релиз на подходе.
🔗 Ссылка на статью
Библиотека пхпшника
❤12🥱2😁1
Если в Laravel у вас есть два очень похожих объекта (например, адрес доставки и адрес оплаты) и вам нужно сделать копию одного из них для другого, вы можете использовать метод
Библиотека пхпшника
#vardump
replicate() и изменить некоторые свойства после этого.Библиотека пхпшника
#vardump
👍13😁3🥱1
Какая функция используется для сортировки массива в естественном порядке (без учета регистра)?
Правильный ответ лежит в канале задач
Правильный ответ лежит в канале задач
😁1
Forwarded from Книги для программистов
Распределённые системы сложные не потому, что «там Kafka и Kubernetes», а потому что время, порядок, сбои и сеть тебе врут. Эта книга учит думать распределёнными системами.
Что внутри без воды:
Про что она на самом деле:
Не про технологии, а про мышление. Про то, как проектировать системы, которые ломаются предсказуемо, а не внезапно. Про то, как перестать надеяться на сеть, часы и «оно само синхронизируется».
Кому читать:
Please open Telegram to view this post
VIEW IN TELEGRAM
💻 Подборка новостей по PHP за неделю:
🔹 Statamic 6 Beta — CMS официально перешёл в beta-стадию после 21 alpha-релиза. Команда уверена в стабильности и обещает скорый выход stable-версии.
🔹 Laravel 12.47.0 — добавлены
🔹 PHP 8.5.2, 8.3.30 и 8.4.17 — багфикс-релизы с улучшением стабильности. Пользователям PHP 8.5 настоятельно рекомендуется обновиться.
🔹 Symfony 12–18 января — улучшен HTTP Cache attribute, доработаны атрибуты событий контроллеров, опубликованы детали SymfonyLive Paris 2026 и представлена сертификация Symfony 8.
🔹 Filament v5 — релиз с поддержкой Livewire v4 и новым инструментом Blueprint. Обновление ориентировано на совместимость и минимальные риски при апгрейде.
Библиотека пхпшника
#свежак
🔹 Statamic 6 Beta — CMS официально перешёл в beta-стадию после 21 alpha-релиза. Команда уверена в стабильности и обещает скорый выход stable-версии.
🔹 Laravel 12.47.0 — добавлены
@includeIsolated для изолированных Blade-инклюдов, Cache::withoutOverlapping() для безопасных операций с блокировками, а также улучшена поддержка enum по всему фреймворку.🔹 PHP 8.5.2, 8.3.30 и 8.4.17 — багфикс-релизы с улучшением стабильности. Пользователям PHP 8.5 настоятельно рекомендуется обновиться.
🔹 Symfony 12–18 января — улучшен HTTP Cache attribute, доработаны атрибуты событий контроллеров, опубликованы детали SymfonyLive Paris 2026 и представлена сертификация Symfony 8.
🔹 Filament v5 — релиз с поддержкой Livewire v4 и новым инструментом Blueprint. Обновление ориентировано на совместимость и минимальные риски при апгрейде.
Библиотека пхпшника
#свежак
❤2🔥1
💡Совет по Laravel: Eager Loading с конкретными столбцами
Знаете ли вы, что при использовании eager loading с отношениями вы можете указать именно те столбцы, которые вам нужны? Это уменьшит использование памяти 🚀
Библиотека пхпшника
#vardump
Знаете ли вы, что при использовании eager loading с отношениями вы можете указать именно те столбцы, которые вам нужны? Это уменьшит использование памяти 🚀
Библиотека пхпшника
#vardump
👍6🥱2😁1🤔1
⚙️ PHP JIT: почему PHP уже не «медленный»
Фразу «PHP простой, но небыстрый» пора отправлять в архив. С выходом PHP 8.0 в язык пришёл JIT — Just-In-Time компиляция.
Суть простая: PHP во время выполнения замечает часто используемый код и компилирует его прямо в машинные инструкции. Меньше работы для Zend Engine, больше — напрямую для CPU.
Важно понимать: JIT не ускоряет всё подряд. В типичных веб-приложениях на Laravel узкие места — это база данных, сеть и I/O. Там JIT почти бесполезен.
Зато в очередях, воркерах, аналитике и массовой обработке данных прирост в 2–5× — реальность.
👉 Подробнее с примерами и бенчмарками — на Medium
Библиотека пхпшника
Фразу «PHP простой, но небыстрый» пора отправлять в архив. С выходом PHP 8.0 в язык пришёл JIT — Just-In-Time компиляция.
Суть простая: PHP во время выполнения замечает часто используемый код и компилирует его прямо в машинные инструкции. Меньше работы для Zend Engine, больше — напрямую для CPU.
Важно понимать: JIT не ускоряет всё подряд. В типичных веб-приложениях на Laravel узкие места — это база данных, сеть и I/O. Там JIT почти бесполезен.
Зато в очередях, воркерах, аналитике и массовой обработке данных прирост в 2–5× — реальность.
👉 Подробнее с примерами и бенчмарками — на Medium
Библиотека пхпшника
😁8🤔3❤1
Forwarded from Библиотека задач по PHP | тесты, код, задания
Что будет результатом работы кода в 8+?
Forwarded from Библиотека задач по PHP | тесты, код, задания
Что будет результатом работы кода?
Anonymous Quiz
27%
1 2 null 3 4
19%
Warning: Only arrays and Traversables... ...1 2 3 4
11%
Parse error: syntax error
43%
Fatal error: Uncaught TypeError: Only arrays and Traversables can be unpacked
🧠 DSL vs паттерны: что выбрать в проекте
В разработке часто встаёт вопрос: использовать ли DSL (Domain Specific Language) или опираться на дизайн-паттерны. Оба подхода помогают структурировать работу с данными и бизнес-логикой, но дают разный результат.
🔍 В чём разница
Паттерны делают код более гибким и слабо связанным, позволяют легко подменять компоненты. Но вместе с этим усложняют ментальную модель — приходится держать в голове фабрики, адаптеры и репозитории, а сама бизнес-логика может «растворяться» в слоях абстракций.
DSL описывает действия напрямую. Язык ближе к предметной области и проще для восприятия, особенно когда задачи сложные или действия цепочкой. Он позволяет выразить логику в явном виде и сократить количество лишних запросов и пост-обработки.
⚠️ Ограничения DSL
🔸 Создание DSL требует серьёзной подготовки: язык должен быть достаточно гибким, чтобы покрывать текущие и будущие сценарии.
🔸 Поддержка DSL может быть трудозатратной, особенно если доменные действия часто меняются.
🔸 Строковые DSL работают как «фронтенд кода» — за ними скрывается движок, который тоже нужно развивать.
✅ Когда что выбрать
Если предметная область хорошо понятна и устойчива — стоит строить DSL.
Если действия ещё уточняются, а изменения происходят часто — лучше опираться на паттерны.
В сложных проектах возможен гибрид: паттерны для структуры и расширяемости, DSL для выражения бизнес-логики.
💬 А как у вас в проектах? Чаще используете паттерны или внедряете DSL?
👉 Читать статью
Библиотека пхпшника
#элементарный_выбор
В разработке часто встаёт вопрос: использовать ли DSL (Domain Specific Language) или опираться на дизайн-паттерны. Оба подхода помогают структурировать работу с данными и бизнес-логикой, но дают разный результат.
🔍 В чём разница
Паттерны делают код более гибким и слабо связанным, позволяют легко подменять компоненты. Но вместе с этим усложняют ментальную модель — приходится держать в голове фабрики, адаптеры и репозитории, а сама бизнес-логика может «растворяться» в слоях абстракций.
DSL описывает действия напрямую. Язык ближе к предметной области и проще для восприятия, особенно когда задачи сложные или действия цепочкой. Он позволяет выразить логику в явном виде и сократить количество лишних запросов и пост-обработки.
⚠️ Ограничения DSL
🔸 Создание DSL требует серьёзной подготовки: язык должен быть достаточно гибким, чтобы покрывать текущие и будущие сценарии.
🔸 Поддержка DSL может быть трудозатратной, особенно если доменные действия часто меняются.
🔸 Строковые DSL работают как «фронтенд кода» — за ними скрывается движок, который тоже нужно развивать.
✅ Когда что выбрать
Если предметная область хорошо понятна и устойчива — стоит строить DSL.
Если действия ещё уточняются, а изменения происходят часто — лучше опираться на паттерны.
В сложных проектах возможен гибрид: паттерны для структуры и расширяемости, DSL для выражения бизнес-логики.
💬 А как у вас в проектах? Чаще используете паттерны или внедряете DSL?
👉 Читать статью
Библиотека пхпшника
#элементарный_выбор
🛠️regexpbuilderphp — регулярные выражения, понятные человеку
Библиотека упрощает создание и делает их более читаемыми. Она подойдет для разработчиков, которые часто используют регулярки, но сложно ориентируются в их традиционном синтаксисе.
🔗Github
#инструменты
Библиотека упрощает создание и делает их более читаемыми. Она подойдет для разработчиков, которые часто используют регулярки, но сложно ориентируются в их традиционном синтаксисе.
🔗Github
#инструменты
🔥14❤1
How to: масштабировать до миллиарда документов в Symfony
Цены на бензин меняются по несколько раз в день. В итоге получается адский датасет: десятки гигабайт CSV и сотни тысяч записей цен за сутки. Если грузить это «как в SQL» (по документу на каждую цену), MongoDB быстро превращается в кладбище индексов и медленных агрегаций.
Как делают по-взрослому: сначала разбираем структуру данных (станции отдельно, цены отдельно), потом проектируем схему под запросы. Главный трюк — bucket pattern: складывать цены не по одной записи, а «ведрами» по станция + тип топлива + день, внутри хранить массив цен за день. Так документов становится в разы меньше, а дневные графики и «последнюю цену» можно доставать быстро.
Дальше — импорт не через «всё в память», а по дням: читаем CSV → временная коллекция → агрегация в bucket-документы → добавляем экстремумы (min/max) и предагрегаты (средние) → подтягиваем данные станции и денормализуем только то, что реально нужно.
👉 Читать статью
Цены на бензин меняются по несколько раз в день. В итоге получается адский датасет: десятки гигабайт CSV и сотни тысяч записей цен за сутки. Если грузить это «как в SQL» (по документу на каждую цену), MongoDB быстро превращается в кладбище индексов и медленных агрегаций.
Как делают по-взрослому: сначала разбираем структуру данных (станции отдельно, цены отдельно), потом проектируем схему под запросы. Главный трюк — bucket pattern: складывать цены не по одной записи, а «ведрами» по станция + тип топлива + день, внутри хранить массив цен за день. Так документов становится в разы меньше, а дневные графики и «последнюю цену» можно доставать быстро.
Дальше — импорт не через «всё в память», а по дням: читаем CSV → временная коллекция → агрегация в bucket-документы → добавляем экстремумы (min/max) и предагрегаты (средние) → подтягиваем данные станции и денормализуем только то, что реально нужно.
👉 Читать статью
🌚1
🧠 Rate Limiting — защита от перегрузки и злоупотреблений
🔹 Rate Limiting — это ограничение количества запросов, которое клиент может сделать за определённый период. Он предотвращает DoS-атаки, brute-force, резкий рост нагрузки и аварийные ситуации.
📌 В Laravel
Laravel имеет встроенную поддержку через middleware
✔️ ограничение на количество запросов за минуту/час;
✔️ разные лимиты для разных пользователей (по ID, API-ключу или IP);
✔️ кастомные сообщения об ошибке.
Пример стандартного ограничения:
```
🧾 Такой подход позволяет задавать разные лимиты для аутентифицированных и анонимных пользователей.
📌 В Symfony
Symfony тоже имеет встроенный Rate Limiter с разными алгоритмами (фиксированное окно, sliding window, token bucket). Он может быть применён к маршрутам через сервисы и конфигурацию.
⚠️ Но для защиты от реальных DoS-атак лучше комбинировать приложение с ограничением на уровне веб-сервера или прокси (NGINX, Cloudflare), поскольку встроенный rate limiter требует загрузки Symfony для каждого запроса.
Библиотека пхпшника
🔹 Rate Limiting — это ограничение количества запросов, которое клиент может сделать за определённый период. Он предотвращает DoS-атаки, brute-force, резкий рост нагрузки и аварийные ситуации.
📌 В Laravel
Laravel имеет встроенную поддержку через middleware
throttle, а также гибкий API для кастомных правил:✔️ ограничение на количество запросов за минуту/час;
✔️ разные лимиты для разных пользователей (по ID, API-ключу или IP);
✔️ кастомные сообщения об ошибке.
Пример стандартного ограничения:
Route::middleware(['throttle:60,1'])->group(function () {
Route::get('/posts', [PostController::class, 'index']);
});
🧾 Это ограничит пользователя до 60 запросов в минуту.
Для более гибкого контроля можно определить лимитер в App\Providers\RouteServiceProvider:
RateLimiter::for('api', function ($request) { return Limit::perMinute(100)->by($request->user()?->id ?: $request->ip());});```
🧾 Такой подход позволяет задавать разные лимиты для аутентифицированных и анонимных пользователей.
📌 В Symfony
Symfony тоже имеет встроенный Rate Limiter с разными алгоритмами (фиксированное окно, sliding window, token bucket). Он может быть применён к маршрутам через сервисы и конфигурацию.
⚠️ Но для защиты от реальных DoS-атак лучше комбинировать приложение с ограничением на уровне веб-сервера или прокси (NGINX, Cloudflare), поскольку встроенный rate limiter требует загрузки Symfony для каждого запроса.
Библиотека пхпшника
🥱4
Service Tags в Symfony: не про ивенты, а про архитектуру
Service tags в Symfony часто воспринимают как утилиту для Event Listener’ов и Twig-расширений. Это правда — но лишь малая часть картины. На практике tags — один из самых мощных архитектурных инструментов Symfony, если использовать их осознанно.
Статья как раз про это: не «как повесить тег», а как построить расширяемую систему без правок YAML и без условной логики — строго по Open-Closed Principle.
Ключевая идея
Мы собираем модульный Document Processing Pipeline:
PDF, CSV, JSON и любые новые форматы
добавление нового процессора = новый класс, без конфигов
Symfony 7.4, PHP 8.3+, атрибуты вместо YAML
Что здесь действительно важно
1. AutoconfigureTag на интерфейсе
Любая реализация автоматически попадает в систему. Никаких
2. TaggedIterator = современный Strategy
Типизированная коллекция сервисов, с ключами и приоритетами, без Compiler Pass’ов «по старинке».
3. defaultIndexMethod вместо магии
Ключ коллекции определяет сам сервис. Контейнер не знает доменной логики — и это правильно.
4. Кастомные атрибуты поверх тегов
Доменные метаданные (
5. TaggedLocator для ленивой загрузки
Ни один процессор не создаётся, пока он реально не нужен. Это критично для больших систем.
6. Compiler Pass как архитектурный guardrail
Контейнер валидирует систему на этапе сборки:
— дубли типов
— архитектурные инварианты
— ошибки ловятся до runtime
7. Абсолютный уровень декомпозиции
Даже чистые PHP-атрибуты без зависимости от Symfony можно «подключить» через
Домен остаётся чистым. Инфраструктура — умной.
Почему это ценно
✔️ расширение без модификации
✔️ ноль условной логики
✔️ высокая тестируемость
✔️ архитектурные ошибки ловятся на этапе сборки контейнера
👉 Читать статью
Библиотека пхпшника
Service tags в Symfony часто воспринимают как утилиту для Event Listener’ов и Twig-расширений. Это правда — но лишь малая часть картины. На практике tags — один из самых мощных архитектурных инструментов Symfony, если использовать их осознанно.
Статья как раз про это: не «как повесить тег», а как построить расширяемую систему без правок YAML и без условной логики — строго по Open-Closed Principle.
Ключевая идея
Мы собираем модульный Document Processing Pipeline:
PDF, CSV, JSON и любые новые форматы
добавление нового процессора = новый класс, без конфигов
Symfony 7.4, PHP 8.3+, атрибуты вместо YAML
Что здесь действительно важно
1. AutoconfigureTag на интерфейсе
Любая реализация автоматически попадает в систему. Никаких
services.yaml.2. TaggedIterator = современный Strategy
Типизированная коллекция сервисов, с ключами и приоритетами, без Compiler Pass’ов «по старинке».
3. defaultIndexMethod вместо магии
Ключ коллекции определяет сам сервис. Контейнер не знает доменной логики — и это правильно.
4. Кастомные атрибуты поверх тегов
Доменные метаданные (
type, priority) живут в атрибуте, а не в конфиге. Код становится декларативным и читаемым.5. TaggedLocator для ленивой загрузки
Ни один процессор не создаётся, пока он реально не нужен. Это критично для больших систем.
6. Compiler Pass как архитектурный guardrail
Контейнер валидирует систему на этапе сборки:
— дубли типов
— архитектурные инварианты
— ошибки ловятся до runtime
7. Абсолютный уровень декомпозиции
Даже чистые PHP-атрибуты без зависимости от Symfony можно «подключить» через
registerAttributeForAutoconfiguration.Домен остаётся чистым. Инфраструктура — умной.
Почему это ценно
✔️ расширение без модификации
✔️ ноль условной логики
✔️ высокая тестируемость
✔️ архитектурные ошибки ловятся на этапе сборки контейнера
👉 Читать статью
Библиотека пхпшника
❤1👍1
В Laravel с версии 10.7 появилась поддержка конвейера для процессов, который легко позволяет связывать вывод одного процесса с входными данными для другого.
Библиотека пхпшника
#vardump
Библиотека пхпшника
#vardump
❤11
Forwarded from Книги для программистов
Если ты знаешь синтаксис, но на словах «графы» и «динамика» начинаешь гуглить — это норм. Эта книга как раз про переход от «я пишу код» к «я понимаю, что делаю».
Второе издание учит алгоритмическому мышлению через задачи из спортивного программирования. Без высшей математики и абстрактной теории. Задача → варианты решений → выбор лучшего.
Что прокачиваешь:
Почему это полезно:
Кому подойдёт:
Скачать
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4
💻 Подборка новостей по PHP за неделю:
🔹 Laravel 12.49.0 — в коллекциях появился метод
🔹 NativePHP for Mobile — бесплатно — объявлен релиз NativePHP Air, а мобильная версия NativePHP стала полностью бесплатной, вместе с рядом улучшений экосистемы и платформы.
🔹 Laravel VS Code Extension 1.5.0 — улучшена поддержка Livewire 4 и Blade: более точный парсинг, автодополнение и IntelliSense для современных Laravel-проектов.
🔹 Statamic 6 — состоялся официальный релиз новой версии CMS: обновлённая админ-панель и современный фронтенд-стек.
🔹 Symfony 26 января — 1 февраля — активное развитие Symfony 8.1, а также выпущены версии 5.4.51, 6.4.33, 7.3.11, 7.4.5 и 8.0.5 для устранения потенциальной уязвимости и усиления безопасности.
Библиотека пхпшника
#свежак
🔹 Laravel 12.49.0 — в коллекциях появился метод
hasSole() для проверки наличия ровно одного подходящего элемента. Также добавлена поддержка between с подзапросами, сохранение ключей в fluent resource collections и работа с датой/временем в команде maintenance mode.🔹 NativePHP for Mobile — бесплатно — объявлен релиз NativePHP Air, а мобильная версия NativePHP стала полностью бесплатной, вместе с рядом улучшений экосистемы и платформы.
🔹 Laravel VS Code Extension 1.5.0 — улучшена поддержка Livewire 4 и Blade: более точный парсинг, автодополнение и IntelliSense для современных Laravel-проектов.
🔹 Statamic 6 — состоялся официальный релиз новой версии CMS: обновлённая админ-панель и современный фронтенд-стек.
🔹 Symfony 26 января — 1 февраля — активное развитие Symfony 8.1, а также выпущены версии 5.4.51, 6.4.33, 7.3.11, 7.4.5 и 8.0.5 для устранения потенциальной уязвимости и усиления безопасности.
Библиотека пхпшника
#свежак
🗂️ Сохранение нескольких моделей
Знаете ли вы, что Laravel позволяет сохранять сразу несколько связанных моделей с помощью метода
Библиотека пхпшника
#vardump
Знаете ли вы, что Laravel позволяет сохранять сразу несколько связанных моделей с помощью метода
saveMany 🚀Библиотека пхпшника
#vardump
❤2