Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter
11.3K subscribers
1.33K photos
21 videos
26 files
4.02K links
Все самое полезное для пхпшника в одном канале.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/bca892d6

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a5d13cd6fa92100ee6f68b
Download Telegram
💬В Laravel есть хелпер Number для простого и удобного форматирования цифровых значений.

Библиотека пхпшника #буст
🔥10👍4
Паттерн Спецификация: реальный опыт применения

Когда репозиторий начинает разрастаться от десятков методов вроде getByThisAndThat(), код становится тяжёлым и неудобным. В таких случаях часто вспоминают паттерн Specification — особенно после хвалебных отзывов на собеседованиях.
Но помогает ли он на практике?

🧱 Что такое «Спецификация»?
Идея проста: вынести логику критериев выборки в отдельные классы, чтобы не засорять бизнес-логику и модель.
Пример из оригинала (Фаулер): решаем, в какой контейнер положить груз — не через ифы, а через метод isSatisfiedBy().

📦 Варианты спецификаций:
Hardcoded — простые классы с жёсткими условиями.
Параметрируемые — с конфигурацией через свойства.
Композитные — объединяют другие спецификации и поддерживают AND/OR/NOT.

💡 Как это выглядит в реальной системе?
Пример из продакшена: программа лояльности, раздача карт клиентам по гибким правилам.
Каждая стратегия начислений генерирует свою спецификацию, которая используется при выборке клиентов для выдачи карт.
Пример кода:

$specification = $loyaltyProgram->createInitialCardIssuingSpecification();
$cards = $cardRepository->findAllBySpecification($specification);

При этом, за фасадом — сложная и кастомная реализация, где каждая спецификация превращается в SQL-запрос, в том числе с поддержкой bulk insert и пагинации.

⚠️ Где ловушка?
Когда спецификации усложняются, репозитории превращаются в мешанину match, if, IS NULL, кастомных условий и бэкфлипов.

🧩 Выводы:
✔️ Использовать, если нужно чётко отделить бизнес-логику от инфраструктуры.
Не использовать как «универсальный антидот» от методов getByXAndY() в репозиториях.
🧼 Иногда проще честно написать findByDateAndStatus().

🔁 Ключевая идея — спецификация — это не про репозиторий, а про знание. Описание того, что значит «подходит». И оно может жить в домене, даже если не содержит SQL.

А вы используете этот паттерн у себя? Или предпочитаете оставаться на стороне простых методов?

🔗 Хабр

Библиотека пхпшника
5🔥3🤔1
Развертывание приложений Laravel на Laravel Cloud с помощью MongoDB Atlas

Разворачивать приложение раньше было больно. Потом появился Forge. А теперь — Laravel Cloud: полноценная платформа как сервис, где развертывание Laravel-приложения занимает меньше минуты и не требует возни с серверами, настройками и uptime-танцами.

🧰 В свежем туториале показали, как:
— задеплоить Laravel на Laravel Cloud
— подключить MongoDB Atlas, даже несмотря на отсутствие нативной поддержки (расширение mongodb уже встроено)

🔥 Фишка: можно подключить MongoDB Atlas в пару шагов — просто скопируйте строку подключения, добавьте переменную окружения, и всё взлетит после redeploy.

⏱️ Пример из статьи: первое успешное развёртывание — за 49 секунд.

🔗 Полный гайд: от подключения репозитория до настройки секрета MONGODB_URL. Скриншоты, логи, возможные ошибки и как их обойти — всё на месте.

📍 Идеально подойдёт тем, кто:
— хочет быстрый прод для pet-проекта
— устал руками разворачивать сервера
🔄 Перекладывать JSON теперь проще

Составили промпт, который поможет в ежедневной рутине перемещения жсонов. Достаточно вставить структуру объекта и необходимый формат.

Промпт:
Напиши функцию на PHP, которая преобразует JSON-объект с полями [Ваш JSON] в [Ваш формат]. Функция должна корректно обрабатывать ошибки парсинга JSON, возвращая либо строку, где произошла ошибка, либо ошибку.


👇 JSONо-укладчики «+» в чат

🐸Библиотека пхпшника #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱8😢2😁1
Git Notes

В статье рассказано о том, как можно использовать малозаметную, но полезную функцию Git — Git Notes — для добавления дополнительной информации к коммитам после их создания. В отличие от стандартных коммитов, которые создают новые объекты при изменении данных (например, при изменении сообщения коммита), Git Notes позволяют прикрепить к существующему коммиту дополнительную информацию, не меняя его.

Git Notes позволяют добавить различные заметки к коммиту с помощью команды git notes add. Эти заметки хранятся в отдельной ветке notes/commits и могут быть сгруппированы по категориям через флаг --ref. Например, можно создать разные типы заметок для одного и того же коммита — заметки, связанные с проверкой качества или тестированием кода.

Функционал Git Notes особенно полезен в таких случаях, как хранение обсуждений и комментариев к pull request'ам (PR). В проекте Symfony используют специальный инструмент для объединения веток, который автоматически сохраняет комментарии из GitHub в виде заметок Git Notes. Эти комментарии прикрепляются к коммитам, что позволяет отслеживать обсуждения даже после смены платформы или удаления исходного PR. Таким образом, при необходимости можно получить доступ к обсуждению, сохранив его вместе с кодом.

Для того чтобы просмотреть или извлечь эти заметки, можно использовать команду git log --notes или настраивать git fetch, чтобы автоматически загружать заметки с сервера.

👉 Читать статью

Библиотека пхпшника
👍5
Какое ревью в вашем PHP-коде было самым спорным?

🤬 Кто-то не принимает match в проде, кто-то на дух не переносит Service-суффиксы в названиях.
А может, у вас спор был из-за static методов, facade-ов или неправильного DI?

Поделитесь:
• Из-за чего начался спор?
• Кто в итоге «победил»?
• Как теперь пишете код?

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

Библиотека пхпшника #междусобойчик
Proglib Academy — это место, где вы превращаете теорию в практику. Здесь ваши знания становятся проектами для портфолио, а вы — более уверенным специалистом.

Выберите курс, который поможет сделать следующий шаг ⬇️

🚀 Для тех, кто начинает путь в IT:

Основы IT для непрограммистов
Программирование на Python (обновлённый)
Frontend-разработчик с нуля: HTML, CSS, JavaScript

🧠 Для будущих и настоящих Data Scientist'ов:

ML для старта в Data Science (начинается в сентябре)
Базовые модели ML и приложения
Математика для Data Science
AI-агенты для DS-специалистов (скоро второй поток)

🛠️ Для опытных разработчиков, готовых к росту:

Алгоритмы и структуры данных
Архитектуры и шаблоны проектирования

Независимо от вашей цели, у нас есть курс, который поможет её достичь. Переходите в Proglib Academy, выбирайте свой путь и инвестируйте в навыки, которые всегда будут в цене!
🛠 PhpStorm‑лайфхак: ускоряем IDE, исключив внешние библиотеки из индексации

Когда в проекте много зависимостей (vendor/, node_modules/ и т.п.), PhpStorm может тормозить из-за длительной индексации.

Простое решение: кликните папку → Mark Directory as → Excluded.

🚀 После этого IDE быстрее работает, особенно при автокомплите и поиске по проекту.

Попробуйте — в крупных проектах сразу почувствуете разницу!

Библиотека пхпшника #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱11👍3😁1😢1🌚1
🔧 Нужен ли static в замыкании? Да — и вот почему

На первый взгляд, совет заменить обычную анонимную функцию на static в array_map может показаться чисто стилевым. Но за этой рекомендацией скрывается реальный прирост производительности.

📌 Что происходит:
static-замыкания не привязаны к $this, а значит, не тащат за собой контекст объекта
– Это позволяет PHP быстрее освобождать память
– И в ряде случаев — существенно ускоряет выполнение кода

💡 Один из PR'ов в Ocramius/GeneratedHydrator показал: просто добавив static, удалось добиться ~15% ускорения. А бенчмарки дали ещё более радикальную разницу:

benchUsingStaticKeyword → 2.10MB / 3.70ms
benchNotUsingStaticKeyword → 71.30MB / 17.17ms

📉 Минус 30x по памяти, минус 4x по времени.
Чтобы внедрить это на постоянной основе, удобно использовать Rector с правилами StaticClosureRector и StaticArrowFunctionRector. Так все замыкания, где не используется $this, становятся static автоматически. 🛠️

Быстрее
Меньше памяти
Автоматическая проверка в CI

👉 Читать статью
👍16
💬 Общие чаты в команде: за и против

Slack, Telegram, Discord — рабочие чаты стали центром всего: задачи, баги, апдейты, мемы. Удобно… пока не превращается в постоянный шум и расфокус.

🔘 Что удобно:

— Быстро решить вопрос без созвонов

— Видно, кто чем занят

— Меньше митингов, больше живого контекста

— Держит команду в тонусе

🔘 Что бесит:

— Поток отвлечений не прекращается

— Важное тонет в болтовне

— Нарушает фокус и deep work

— Появляется тревожка «а вдруг я что-то пропустил»

Чаты работают, когда в них есть правила: меньше @all, больше тредов, без лишнего шума — и никто не сходит с ума.

А как у вас: общие чаты помогают или выматывают? Расскажите, как вы с этим справляетесь👇

🐸Библиотека пхпшника #междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
1
💻 Подборка новостей по PHP за неделю:​

🔹 Laravel Idea бесплатно — с 30 июля 2025 плагин Laravel Idea стал бесплатным для пользователей PhpStorm, полный доступ ко всем функциям без доплат.

🔹 PHP 8.5.0 Alpha 4 — новая тестовая версия в рамках цикла PHP 8.5.

🔹 PHP 8.4.11 и 8.3.24 — релизы с исправлениями ошибок, рекомендуется обновление.

🔹 Symfony 7.3.2 — техническое обновление, доступны гайды и отчёты SymfonyInsight для безопасного апгрейда.

🔹 Symfony 28 июля — 3 августа 2025 — вышли версии 6.4.24, 7.2.9 и 7.3.2; начата депрекация XML-конфигурации в некоторых компонентах, улучшен YAML с автодополнением, переработан процесс дампа контейнера в XML.

Библиотека пхпшника #свежак
🔥2
⌨️ Топ-вакансий по PHP за неделю

PHP-разработчик (Symfony) — от 160 000 ₽, удалёнка (Москва)

TeamLead backend (PHP) — от 350 000 ₽, офис (Москва)

Senior PHP-разработчик — от 300 000 ₽, Гибрид (Москва, Батуми)

➡️ Еще больше топовых вакансий — в нашем канале PHP Jobs
Оптимизированное шифрование строк с помощью Fluent в Laravel

Статья рассказывает о нововведении в Laravel, которое делает работу со шифрованием строк проще и читаемее.

Раньше, чтобы зашифровать строку внутри fluent-цепочки (str()), приходилось использовать pipe() с анонимной функцией — это разрывало читаемость кода.

Теперь Laravel поддерживает методы encrypt() и decrypt() прямо в цепочках, что позволяет:
🔹 Не выходить из fluent-интерфейса;
🔹 Поддерживать читаемость;
🔹 Использовать уже настроенные параметры шифрования (cipher, key) приложения.

Также показан реальный кейс: генерация и расшифровка идентификаторов документов, где важно:
🔸 зашифровать строку с нужным форматированием (дата, департамент и ID);
🔸 сохранить длину и читаемость;
🔸 безопасно расшифровывать обратно.

Ключевая идея: теперь можно удобно и безопасно обрабатывать чувствительные данные (настройки, токены, ID и пр.) прямо внутри str()-цепочек без лишнего кода.

🔗 Читать статью

Библиотека пхпшника #буст
Хватит спрашивать у синьоров джуниорские вопросы на собеседованиях

Это крик души разработчика с 11-летним опытом, который устал от формальных, оторванных от реальности собеседований. Он не жалуется — он говорит правду, которую многие думают, но не озвучивают: вместо оценки реального опыта, мышления и навыков — проверяют память и подготовку к викторине.

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

🔗 Хабр
1👍168😁2
🧅 Onion: Механизм многоуровневой обработки для PHP-приложений

Onion — это легкий пакет, предназначенный для облегчения многоуровневой обработки данных в приложениях. Он обеспечивает чистый и эффективный способ укладки слоев функциональности, позволяя разработчикам создавать гибкие и многократно используемые компоненты, которые легко компоновать и управлять ими. Каждый слой может выполнять определенную операцию над передаваемыми данными, что упрощает построение сложных рабочих процессов, сохраняя при этом четкое разделение задач.

👉 Github

Библиотека пхпшника #инструменты
4
Правильный перезапуск Opcache после развертывания

Важно правильно перезагружать Opcache при деплое кода на сервер без использования контейнеров.

Opcache сохраняет старые версии файлов в кэше и не выбрасывает их автоматически. Поэтому, если новая версия кода деплоится в новую директорию, старые файлы остаются в кэше, занимая место и предотвращая сохранение новых файлов. Это приводит к необходимости постоянной перекомпиляции новых файлов, что снижает производительность.

Статья предлагает два решения проблемы:

1. Перезагрузка процесса «php-fpm» после деплоя новой версии кода. Однако, это решение приводит к прерыванию текущих запросов на короткое время.

2. Использование утилиты gordalina/cachetool или аналогичной, например, chop, для сброса кэша. Cachetool позволяет сбросить кэш без перезагрузки php-fpm, обнаруживая PHP-FPM через сокеты или IP-адрес и порт. Утилиту можно установить и использовать следующими командами:

Скачивание и установка:
curl -sLO https://github.com/gordalina/cachetool/releases/latest/download/cachetool.phar

chmod +x cachetool.phar

Сброс кэша:

php cachetool.phar opcache:reset

В случае использования других сокетов или IP-адресов и портов, команда выглядит так:
php cachetool.phar opcache:reset --fcgi=/var/run/php/php8.2-fpm-profiler.sock
👍5