Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter
Все самое полезное для пхпшника в одном канале. По рекламе: @proglib_adv Учиться у нас: clc.to/M561SQ Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5d13cd6fa92100ee6f68b
Show more📈 Analytical overview of Telegram channel Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter
Channel Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter (@phpproglib) in the Russian language segment is an active participant. Currently, the community unites 10 521 subscribers, ranking 11 322 in the Technologies & Applications category and 60 492 in the Russia region.
📊 Audience metrics and dynamics
Since its creation on невідомо, the project has demonstrated rapid growth, gathering an audience of 10 521 subscribers.
According to the latest data from 27 August, 2026, the channel demonstrates stable activity. Although there has been a change in the number of participants by -65 over the last 30 days and by -3 over the last 24 hours, overall reach remains high.
- Verification status: Not verified
- Engagement rate (ER): The average audience engagement rate is 19.19%. Within the first 24 hours after publication, content typically collects 9.59% reactions from the total number of subscribers.
- Post reach: On average, each post receives 2 019 views. Within the first day, a publication typically gains 1 009 views.
- Reactions and interaction: The audience actively supports content: the average number of reactions per post is 15.
- Thematic interests: Content is focused on key topics such as php, laravel, пхпшника, artisan, api.
📝 Description and content policy
The author describes the resource as a platform for expressing subjective opinions:
“Все самое полезное для пхпшника в одном канале.
По рекламе: @proglib_adv
Учиться у нас: clc.to/M561SQ
Для обратной связи: @proglibrary_feeedback_bot
РКН: https://gosuslugi.ru/snet/67a5d13cd6fa92100ee6f68b”
Thanks to the high frequency of updates (latest data received on 28 August, 2026), the channel maintains relevance and a high level of publication reach. Analytics show that the audience actively interacts with content, making it an important point of influence in the Technologies & Applications category.
$this->name = $name
— поведение то же
— кода меньше
— читать быстрее
Мозг фокусируется на зависимостях класса, а не на механике.
Видимость — любая
class Post
{
public function __construct(
public string $title,
public string $content,
private int $authorId
) {}
}
Работает ровно так, как ожидается.
Реальный эффект на проекте
В одном Laravel-сервисе было 12 свойств.
Конструктор — ~30 строк.
После рефакторинга:
— 6 строк
— логика не изменилась
— код стало проще ревьюить
Времени: ~2 минуты (multi-cursor в VS Code).
Когда стоит использовать
Используйте promotion, если:
— свойства задаются только в конструкторе
— нет дополнительной логики при присваивании
— хотите чистый, современный PHP
Когда не стоит
Не используйте, если:
— нужна валидация
— вы трансформируете значение
— важно явно показать логику инициализации
Здесь старый способ — осознанно лучше.
🔗Ссылка на статью
Библиотека пхпшника.env:
APP_DEBUG=false
LOG_LEVEL=info
Это снизит объём логов, не выводя SQL-запросы по умолчанию (они обычно логируются на уровне debug).
Если же вы используете кастомный логгер запросов — отключите его в продакшене.
🟩 Symfony / Doctrine ORM
Doctrine по умолчанию может логировать SQL через SQLLogger (особенно в dev-режиме).
Для отключения логгера Doctrine:
$emConfig = $entityManager->getConnection()->getConfiguration();
$emConfig->setSQLLogger(null);
Это полностью выключит SQL-логирование для этого соединения.
Такой подход особенно полезен при массовых операциях, например в консольных командах или миграциях.
💡 Значение null удаляет логгер, и Doctrine перестаёт накапливать записи о каждом выполненном SQL.
⚠️ В более новой версии Doctrine SQLLogger был заменён системой middlewares, и для полного отключения придётся убирать middleware-логгеры — см. документацию.
📌 Пример использования в консоли (Symfony)
Если у вас есть импорты/массовая обработка в консольной команде — отключите логгер в начале:
public function execute(InputInterface $input, OutputInterface $output): int
{
$config = $this->entityManager->getConnection()->getConfiguration();
$config->setSQLLogger(null);
// дальнейшая обработка
}
Такой трюк помогает избежать накопления большого количества логов в памяти и снижает риски OOM (Out Of Memory).
🧠 Когда это стоит делать
✅ Тяжёлые операции с данными: импорт/экспорт больших таблиц, миграции
✅ Длительные фоновые задачи в очередях/консоли
✅ Прод-окружение, где логи не нужны для каждого SQL-запроса
⚠️ Когда не стоит отключать
❗ Если вы на этапе отладки и хотите видеть каждый запрос для оптимизации
❗ Если нужно собирать подробную аналитику SQL-вызовов
❗ Если у вас разработка и подробные логи помогают тестировать логику
Библиотека пхпшника PHP пора осваивать архитектуру автономных систем для расширения возможностей своих проектов.
Этапы обучения:
— изучение принципов взаимодействия с языковыми моделями через API;
— проектирование агентской логики: инструменты, память, планирование;
— интеграция мультиагентных систем в веб-сервисы;
— оптимизация работы агентов для решения бизнес-задач.
Курс «Разработка ИИ-агентов» проведёт вас от теории до реализации готовых ИИ-решений.
Стать AI-разработчиком
До 19 января действует акция «3 в 1»: купите один курс — два получите бесплатно.#[MapRequestPayload] в Symfony выглядят отлично.
Но ошибки валидации по умолчанию — шумные, разные по формату и неудобные для фронта.
Из-за этого часто появляются:
🔸 try/catch в контроллерах
🔸 дублирующийся маппинг ошибок
🔸 хаос в API-ответах
✅ Правильный подход
Пусть валидация падает сама, а форматирование ошибок происходит глобально, один раз.
Это решает Symfony Validation Response Bundle:
🔹 перехватывает ошибки из #[MapRequestPayload], #[MapQueryString], #[MapUploadedFile];
🔹 возвращает чистый JSON;
🔹 единый формат для всех эндпоинтов;
🔹 без логики в контроллерах.
🚀 Быстрый старт
composer require soleinjast/symfony-validation-response
Без конфигурации. Есть simple, RFC7807 и кастомные форматтеры.
👉 Подробный разбор и примеры — в статье.
Библиотека пхпшникаwhereHas() на whereRelation():
// было
User::whereHas('profile', function ($q) {
$q->where('is_verified', false);
})->get();
// стало
User::whereRelation('profile', 'is_verified', false)->get();
Формально — да, код короче.
Практически — не всё так радужно.
🧠 В чём реальная разница
whereHas() — явно про отношения
User::query()
->whereHas('profile', fn ($q) => $q->where('is_verified', false))
->get();
С первого взгляда понятно:
🔸фильтрация по relation
🔸логика живёт внутри профиля
🔸условия легко расширяются
🔸запрос честно отражает намерение
whereRelation() — скрывает сложность
User::whereRelation('profile', 'is_verified', false)->get();
Читается как фильтр по колонке users.
Но на деле — это подзапрос к связанной таблице.
❗️ Это вводит в заблуждение, особенно при чтении чужого кода.
🧩 Масштабирование условий
С whereHas() — естественно и прозрачно:
->whereHas('profile', fn ($q) => $q
->where('is_verified', false)
->whereNotNull('phone')
->where('age', '>', 18)
)
С whereRelation():
🔸либо цепочка вызовов
🔸либо возврат к whereHas()
🔸либо каша из стилей
🔍 Поиск и поддержка кода
Реальный кейс:
«Эндпоинт тормозит, ищем фильтрацию по отношениям»
whereHas() — легко найти поиском
whereRelation() — прячется среди обычных where
Для поддержки и отладки это критично.
⚙️ Производительность — миф
whereRelation() не быстрее.
Под капотом — тот же whereHas() и почти идентичный SQL.
Если медленно:
🔸нет индексов
🔸не тот подход к запросу
Метод тут ни при чём.
🧱 Проблема консистентности
Что происходит в проектах:
1. Сначала whereRelation() — «быстро и красиво»
2. Потом требования растут
3. Появляется whereHas()
4. В коде — два стиля без причины
5. В ревью — споры
Если сразу использовать whereHas():
🔸один паттерн
🔸единый стиль
🔸код готов к росту
🧠 Внутренности Laravel
Без магии:
whereRelation() — это обёртка над whereHas().
Не умнее. Не быстрее. Просто без closure.
📌 Правило на практике
Можно whereRelation(), если:
🔸один простой фильтр
🔸скрипт, отчёт, админка
🔸логика точно не вырастет
Лучше whereHas(), если:
🔸бизнес-логика
🔸командная разработка
🔸код придётся читать и менять
Экономия пары символов — плохой аргумент.
Пишите код для того, кто откроет файл через полгода.
В реальных проектах честный whereHas() почти всегда выигрывает.
👉 Ссылка на статью
Библиотека пхпшника
#элементарный_выборКорутины не решают CPU-bound задачи.Решение с выносом вычислений в отдельные процессы оказалось быстрее, несмотря на IPC. 🧠 Базовая модель: Single-threaded + offload Рабочая архитектура, уже доказавшая эффективность: Event Loop (1 поток) I/O, сеть, БД, ожидание Workers (несколько потоков / процессов) сжатие, криптография, парсинг, ML Так работают: 🔸Node.js (Worker Threads) 🔸Python (asyncio + executors) 🔸 PHP (Swoole Request Workers + Task Workers) ✅ Плюсы модели 🔹 тысячи I/O-операций без mutex’ов 🔹 простота reasoning’а (нет гонок) 🔹 минимум требований к компилятору 🔹 контроль над нагрузкой ❌ Минусы 🔻 ручное разделение задач 🔻 легко ошибиться и положить event loop 🔻 плохо подходит для вычислительных систем 🧱 Почему PHP не готов к потокам «из коробки» Главная проблема — память и GC: 🔸глобальный
object_store
🔸refcount + stop-the-world GC
🔸память одного VM нельзя освобождать из другого потока
🔸ZTS ≠ настоящая многопоточность
PHP — строго single-VM модель.
🧠 Ключевая идея: не делить память, а передавать владение
Вместо shared mutable state:
🔸move-семантика объектов
🔸если refcount = 1 → перенос без копии
🔸иначе → deep copy с сохранением идентичности
Это:
🔸безопасно
🔸без сериализации
🔸прозрачно для разработчика
🧵 Что реально нужно в core
🔸многопоточный memory manager
🔸адаптация GC под параллельный режим
🔸поддержка shared immutable объектов (GC_SHARE)
🔸исследование region-based memory
Это не «хотелки», а необходимые условия.
🧩 Корутины + потоки вместе
Поток = Awaitable.
🔸корутина не блокируется
🔸CPU-задача уходит в thread pool
🔸event loop остаётся отзывчивым
Код выглядит последовательно, но работает параллельно.
🎭 Самая сильная абстракция — Actors
Actors дают:
🔸изолированное состояние
🔸последовательную обработку сообщений
🔸отсутствие mutex’ов
естественное OOP-мышление
Каждый actor:
🔸может жить в своём потоке
🔸имеет собственный регион памяти
🔸безопасно масштабируется
Это реальный путь к безопасной многопоточности в PHP.
🔗 Medium
Библиотека пхпшникаdot и undot
При работе с коллекциями Laravel может возникнуть необходимость преобразовать многомерную коллекцию в одноуровневую или наоборот. К счастью, для этого существуют два метода: dot() и undot() 🚀.
Библиотека пхпшника
#vardumpafterResponse(), позволяющие обрабатывать ответ после его получения. Также добавлены ассерты заголовков для TestResponse, новые fluent-методы валидации дат и другие улучшения.
🔹 Laravel News: итоги 2025 — редакция подвела итоги года, отметив ключевые события экосистемы: релиз Laravel 12, запуск Laravel Cloud, крупные обновления инструментов и рост сообщества.
🔹 Symfony: итоги 2025 года — команда Symfony рассказала о главных достижениях проекта за год, поблагодарив сообщество за вклад в развитие фреймворка.
🔹 Symfony 29 декабря 2025 — 4 января 2026 — выпущены maintenance-версии Symfony 6.4.31, 7.3.9, 7.4.3 и 8.0.3, а также опубликован официальный годовой обзор Symfony за 2025 год.
🔹 Symfony UX 2.32.0 — представлен новый Toolkit Package с настраиваемыми UI-компонентами (на базе Shadcn UI): Button, Dialog, Card, Table, Pagination и другие.
Библиотека пхпшника
#свежакClosure с автоматически выведенной сигнатурой.
🧠 Что это даёт на практике
• 📉 Меньше стрелочных функций ради передачи одного аргумента
• 🧩 Колбэки становятся короче и читаемее
• 🔎 Намерение кода видно сразу, без «обвязки»
• 🔗 Отлично сочетается с pipe-оператором
• 🧪 Упрощает функциональный стиль и композицию
🧱 Ключевая идея
Используются плейсхолдеры:
? — ровно один аргумент
… — все оставшиеся аргументы
PHP не вызывает функцию, а возвращает преднастроенный callable.
⚙️ Где особенно полезно
• array_map, array_filter, usort
• Преднастроенные валидаторы и фильтры
• HTTP-middleware и пайплайны
• Thunk-функции (отложенное выполнение)
• Конфигурация через именованные аргументы
🧩 Реальный сценарий
Преднастроенные операции — например, добавление заголовков, логирование, фильтрация данных — можно оформить один раз и переиспользовать без дублирования логики.
⚠️ Ограничения
• Конструкторы нельзя частично применять
• Для new — только фабрики или статические методы
• Variadic-аргументы можно как «оставить открытыми», так и зафиксировать
Partial Function Application — это не синтаксический сахар, а структурное упрощение колбэков. PHP продолжает двигаться в сторону выразительного и функционального кода, снижая шум и повышая читаемость.
🔗 Читать статью
Библиотека пхпшникаdynamic количество процессов изменяется в зависимости от нагрузки сервера.
pm.max_children = 1000
Максимальное количество рабочих процессов. Высокие значения могут привести к ошибкам из-за нехватки памяти. Пример: для 1000 процессов × 100MB/процесс потребуется 100GB RAM.
pm.start_servers = 80
Количество процессов, которое будет запущено при старте PHP-FPM для быстрой обработки начальной нагрузки.
pm.min_spare_servers = 40
Минимальное количество «запасных» процессов, которые должны оставаться в ожидании.
pm.max_spare_servers = 120
Максимальное количество неактивных процессов. Если их больше, лишние процессы будут завершаться.
request_terminate_timeout = 300s
Ограничение времени для запроса — если выполнение длится более 5 минут, процесс будет завершен.
request_slowlog_timeout = 5s
Все запросы, которые выполняются более 5 секунд, записываются в лог для анализа производительности.
📊 Рекомендации:
Для серверов с меньшим объёмом памяти, например 8GB RAM, настройте:
pm = dynamic
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
Эти настройки обеспечат баланс между производительностью и безопасностью, сохраняя ресурсы для других служб.
👉 Поделитесь этим постом с коллегами!
🔗 Ссылка на статью
Библиотека пхпшника
#лучшее2025Laravel и Symfony проекты. Пусть боты разгребают почту, модерируют контент и пишут API-документацию за вас.
На курсе вы узнаете:
— как работают ReAct-агенты;
— как связать n8n с вашим PHP-кодом;
— как использовать протокол MCP для командной работы ботов.
🎄 Успейте до 12 января забрать курс по акции «3 в 1». Это ваш билет в мир современного IT.
Ускорить разработку