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

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

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

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

РКН: https://gosuslugi.ru/snet/67a5d13cd6fa92100ee6f68b
Download Telegram
🧠 DSL vs паттерны: что выбрать в проекте

В разработке часто встаёт вопрос: использовать ли DSL (Domain Specific Language) или опираться на дизайн-паттерны. Оба подхода помогают структурировать работу с данными и бизнес-логикой, но дают разный результат.

🔍 В чём разница

Паттерны делают код более гибким и слабо связанным, позволяют легко подменять компоненты. Но вместе с этим усложняют ментальную модель — приходится держать в голове фабрики, адаптеры и репозитории, а сама бизнес-логика может «растворяться» в слоях абстракций.

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

⚠️ Ограничения DSL

🔸 Создание DSL требует серьёзной подготовки: язык должен быть достаточно гибким, чтобы покрывать текущие и будущие сценарии.
🔸 Поддержка DSL может быть трудозатратной, особенно если доменные действия часто меняются.
🔸 Строковые DSL работают как «фронтенд кода» — за ними скрывается движок, который тоже нужно развивать.

Когда что выбрать
Если предметная область хорошо понятна и устойчива — стоит строить DSL.
Если действия ещё уточняются, а изменения происходят часто — лучше опираться на паттерны.
В сложных проектах возможен гибрид: паттерны для структуры и расширяемости, DSL для выражения бизнес-логики.

💬 А как у вас в проектах? Чаще используете паттерны или внедряете DSL?

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

Библиотека пхпшника

#элементарный_выбор
1
CPX

Это как npx но для PHP. Этот инструмент позволяет выполнить любую команду из любого пакета Composer, даже если он не установлен в вашем проекте.

🔗 Github

Библиотека пхпшника

#инструменты
🤖 Курс «ИИ-агенты для DS-специалистов»

Последняя возможность в этом году освоить ИИ-агентов с Proglib— старт живых вебинаров на курсе уже 3 октября!

Уже 24 студента изучают 5 лонгридов подготовительного модуля, чтобы сформировать базу к старту живых вебинаров с Никитой Зелинским.

📚 Бонус: при оплате до 30 сентября вы получите дополнительный лонгрид для подготовки к курсу. Это отличный способ подойти к занятиям уже с базой.

🔥 А ещё после прохождения курса у вас будет достаточно знаний, чтобы участвовать в хакатоне с призовым фондом 1 125 000 ₽.

🔗 Записаться на курс и узнать подробности
🚀 How to: защититься от гонок данных в Laravel с помощью Cache::lock()

Когда несколько процессов одновременно пытаются изменить один и тот же ресурс, появляется риск race condition — непредсказуемых ошибок и потери данных.
В Laravel есть элегантное решение — Cache::lock(), которое помогает реализовать атомарные блокировки даже в распределённых системах.

🔒 Как это работает

Вы создаёте именованный лок (Cache::lock("key", $seconds)), который «занимает» ресурс.

Пока лок удерживается, другие процессы не смогут выполнить код внутри него.

По окончании работы лок освобождается (или снимается автоматически по таймауту, если процесс «упал»).

🛠 Где применять

🔄 Обновление стока в интернет-магазине: гарантировать, что количество товара не «улетит» в минус при одновременных заказах.

💳 Финансовые транзакции: исключить двойное списание при параллельных платежах.

⚡️ Почему это удобно


Работает с Redis, Memcached и другими драйверами.

Таймаут защищает от «вечных» блокировок.

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

👉 Если у вас распределённые воркеры или несколько серверов, используйте Cache::lock() для критичных секций кода. Это простой способ сохранить целостность данных и избавиться от коварных багов конкурентности.

🔗 Ссылка на статью
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
🛠 Git-лайфхак в PhpStorm

Если часто работаешь с Git прямо из PhpStorm, есть один суперполезный трюк, который экономит кучу времени: интерактивный rebase через IDE.

🔍 Что это?

Вместо того чтобы открывать терминал и писать git rebase -i, можно делать интерактивное редактирование коммитов прямо в PhpStorm: объединять, редактировать сообщения или менять порядок коммитов.

⚡️ Как использовать?

1. Открой меню VCS → Git → Rebase → Interactive…

2. Выбери ветку, относительно которой хочешь сделать rebase.

3. В открывшемся списке коммитов можно:

• Edit — изменить сообщение или содержимое коммита

• Squash — объединить коммиты

• Reword — только изменить сообщение

• Drop — удалить коммит

Все изменения применяются прямо из интерфейса — никаких терминальных ошибок и лишних команд.

💡 Почему это круто?

Меньше ошибок при редактировании истории

Не нужно помнить синтаксис git rebase -i

Быстро объединяешь коммиты перед пушем

Полная визуализация истории прямо в IDE
Please open Telegram to view this post
VIEW IN TELEGRAM
7
PHP: Общая память

Хочется быстрый кеш или общение между процессами? Хочется использовать фишки long-running PHP, но без long-running?

Давайте разберёмся, как работать прямо с оперативной памятью: от System V до MapViewOfFile; От shmop до FFI.

🔗 Хабр

Библиотека пхпшника
5👍3🤔1
Оффтоп в пятницу

У нас к вам несерьёзный вопрос — как вы называете X? Не букву, а социальную сеть. До сих пор говорите твиттер или привыкли, к тому, что это теперь икс?

Пишите свои варианты в комменты, а ещё подпишитесь на наш канал в твиттериксе ➡️ Подписаться

🐸 Библиотека пхпшника
Please open Telegram to view this post
VIEW IN TELEGRAM
🌚2
📚 Expert Linux Administration Guide: Administer and Control Linux Filesystems, Networking, Web Server, Virtualization, Databases, and Process Control (2022)

Все мы знаем, что Linux — это не просто система, а целая философия. Но вот беда: админить её часто приходится по принципу «гуглишь до рассвета, молишься до обеда».

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

📌 Что внутри:

🔴Как настраивать DNS, почтовики и Squid так, чтобы они не падали каждые выходные.

🔴Фаерволы, балансировка и «да кто там опять открыл 22 порт наружу?!»

🔴Бэкапы и восстановление (да-да, то самое, про которое все вспоминают только когда уже поздно)

🔴Виртуализация, мониторинг, апдейты пакетов и прочие радости.

🔗 Скачать

🐸 Книги для программистов
Please open Telegram to view this post
VIEW IN TELEGRAM
5
📎 Разница между merge и rebase в git

🐸 Библиотека пхпшника
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔8👍1🌚1
🚀 Курс «ИИ-агенты для DS-специалистов» уже стартовал

Первый вебинар успешно прошёл, участники уже начали разбираться, как использовать ИИ-агентов в реальных проектах.

Но всё самое интересное только начинается!

🔥 Впереди 4 мощных занятия — с практикой, инсайтами и разбором кейсов от экспертов.

💸 Сейчас действует специальная цена → 69.000 ₽ вместо 79.000 ₽.

Осталось всего 4 места.

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

👉 Забронировать место на курсе
😁5😢2
💻 Подборка новостей по PHP за неделю:​

🔹 Laravel Starter Kit — Nuno Maduro представил новый строгий стартовый набор для проектов. Он включает строгую проверку типов, форматирование и статический анализ на максимальных настройках.

🔹 PHP 8.5.0 RC 1 — вышел первый релиз-кандидат PHP 8.5.0, следующий шаг перед финальным релизом в ноябре. Также опубликованы багфикс-релизы PHP 8.3.26 и PHP 8.4.13.

🔹 Symfony 7.3.4 — вместе с ним выпущены версии 6.4.26 и 7.3.4.

🔹 Symfony 22–28 сентября 2025 — развитие Symfony 7.4 продолжается: добавлены новые функции и внесены депрекейшены перед релизом в ноябре.

Библиотека пхпшника

#свежак
1🔥1😢1
💡Совет по Laravel: Статистика обработчика HTTP-клиента

HTTP-клиент Laravel использует Guzzle, предоставляя доступ к статистике по каждому запросу, включая общее время, скорость загрузки и многое другое 🚀

Библиотека пхпшника

#vardump
👍1
🔥 Saga pattern в PHP-микросервисах: как приручить хаос распределённых транзакций

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

👉 Здесь на сцену выходит Saga pattern — способ координации распределённых транзакций без глобального коммита. Он превращает «монолитный» ACID-подход в управляемую серию шагов, каждый из которых либо завершается успешно, либо компенсируется обратным действием.

⚖️ Откуда растут ноги
В распределённых системах невозможно одновременно держать:
🔸 Consistency (согласованность),
🔸 Availability (доступность),
🔸 Partition Tolerance (устойчивость к сетевым сбоям).

CAP-теорема заставляет выбирать. Микросервисы обычно выбирают доступность + устойчивость, жертвуя мгновенной консистентностью.
Saga — это про eventual consistency и отказ от «всё или ничего» в пользу гибкой компенсации.

🧩 Основные принципы Saga

Локальные транзакции — каждая операция выполняется внутри своего сервиса и своей базы.
Компенсирующие действия — для каждого шага определяется обратное (отмена заказа, возврат средств, снятие резерва).
Pivot-операция — «точка невозврата», после которой процесс обязан завершиться (например, списание средств или отправка товара).
Идемпотентность — шаги должны безопасно повторяться (например, повторный возврат денег не должен удвоить баланс).
Наблюдаемость — все шаги саги должны логироваться и мониториться как единый процесс.

🕺 Хореография vs 🎼 Оркестрация

Хореография (event-driven):
Сервисы реагируют на события друг друга («создан заказ» → «оплата прошла» → «товар зарезервирован»).
Плюсы: нет центрального управляющего, меньше точек отказа, естественная асинхронность.
Минусы: сложно тестировать и дебажить, растут циклы и зависимости.

Оркестрация (central coordinator):
Есть управляющий компонент, который пошагово запускает сервисы и следит за компенсацией.
Плюсы: прозрачность, контроль, простая трассировка.
Минусы: единая точка отказа, риск узкого места.

🛡️ Типовые проблемы и решения

Lost update: несколько саг меняют один ресурс. Решение — семантические блокировки или оптимистические версии.
ABA-проблема: значение успело измениться A→B→A. Решение — векторные часы, версии.
Dirty read: один сервис читает «грязные» данные другого. Решение — откладывать коммиты или использовать операции как очередь.
Подвисшие саги: шаг завис или умер. Решение — таймауты + процесс восстановления.

🏗️ Что важно в проде
Чётко определённые компенсации для каждого шага.
Хранение состояния саги (статус, завершённые шаги, таймстемпы).
Автовосстановление: незавершённые саги нужно уметь продолжать или компенсировать.
Мониторинг и алерты: метрики (saga.started, saga.completed, saga.failed).
Property-based тесты:
либо все шаги завершены,
либо все выполненные шаги компенсированы.

А вы бы выбрали хореографию событий (больше свободы, но сложнее отлаживать) или центрального дирижёра (прозрачность и контроль, но SPOF)?

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

Библиотека пхпшника
👍103
Что будет выведено в результате работы скрипта?
🤔2
🔥 PHP 8.5: релиз, который радует мелочами

Совсем скоро выходит PHP 8.5, и это именно та версия, где нет «вау»-революции, но есть куча приятных мелочей, которые сделают жизнь разработчика проще. Давайте разберёмся, что нового.

➡️ Pipe Operator

Теперь можно писать цепочки вызовов без временных переменных.
Код читается слева направо — и становится чище.

🛑 Атрибут #[NoDiscard]

Если функция возвращает значение, которое нельзя игнорировать — PHP предупредит. Это реально спасает от багов, когда кто-то «забыл» использовать результат вызова.

🔒 Closures в константах

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

🧰 Array helpers

array_first() и array_last() — наконец-то нормальные функции для получения первого и последнего элемента массива. Без возни с указателем.

🏷 Атрибуты для глобальных констант

Теперь константы можно помечать метаданными (например, #[Deprecated]). Удобно для больших пакетов и конфигураций.

⚡️ Новый get_exception_handler()

Наконец-то можно посмотреть, какой exception handler у вас сейчас установлен. Полезно для фреймворков и глобальной обработки ошибок.

🌍 Intl List Formatter

Форматирует списки по правилам локали: "Lisbon, Porto, and Coimbra". Для интернационализации — находка.

🖥 Улучшения в CLI

php -i --diff — показывает, чем ваша php.ini отличается от дефолта.

Константа PHP_BUILD_DATE — точная дата сборки бинаря.

Final Property Promotion — можно делать отдельные свойства final.

Чуть более удобные ошибки и варнинги в CLI.

😀 Это та версия, которая не ломает привычки, а аккуратно убирает шероховатости. Если вы пишете на PHP каждый день — разницу почувствуете сразу.

🙂 Вопрос к вам: какая из фич PHP 8.5 войдёт в ваш код первой?
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥23❤‍🔥1
🚀 Laravel MCP: новая библиотека для AI-интеграций в Laravel

недавно в публичную бету вышел Laravel MCP — библиотека, которая позволяет разворачивать Model Context Protocol (MCP)-серверы прямо внутри вашего Laravel-приложения.

🔎 Что такое MCP?

Model Context Protocol (MCP) — это открытый стандарт, который помогает AI-ассистентам (ChatGPT, Claude, Cursor и др.) безопасно подключаться к внешним сервисам и данным. Вместо того чтобы писать отдельные интеграции для каждого ИИ, MCP предлагает универсальный API для агентов.

Laravel MCP поддерживает три ключевых примитива протокола:
🔸 Tools — выполнение действий: от генерации инвойсов до запуска команд.
🔸 Resources — предоставление данных и контента (документы, профили, отчёты).
🔸 Prompts — шаблоны для типовых запросов (ревью кода, модерация контента).

🛠️ Возможности Laravel MCP
Servers: точка входа для взаимодействия с AI.
Поддерживаются web-серверы (HTTP для удалённых клиентов) и локальные (artisan-команды для девелопмента).
Tools: выносите бизнес-логику наружу — AI сможет запускать её по запросу пользователя.
Resources: отдавайте данные приложения в структурированном виде.
Prompts: формируйте повторно используемые шаблоны общения с ИИ.

🔐 Безопасность
Laravel MCP поддерживает два подхода к защите web-серверов:
OAuth 2.1 (Laravel Passport) — надёжный вариант для продакшена.
Token-based (Laravel Sanctum) — простой и лёгкий способ защиты.
Дополнительно можно встраивать авторизацию прямо в обработчики инструментов и ресурсов.

📦 Установка
Требования: PHP 8.1+, Laravel 10/11/12.
Установка: composer require laravel/mcp.
После — публикуете routes/ai.php, где настраиваются MCP-сервера.

🔬 Тестирование
🔹 MCP Inspector: CLI-утилита для проверки аутентификации и отладки MCP-сервера.
🔹 Unit tests: есть встроенные ассершены для проверки ответов и симуляции запросов.

💡 Где применять
🔹 Для разработчиков: генерация кода, запуск artisan-команд, автоматизация тестов.
🔹 Для бизнеса: AI-инвойсинг, управление пользователями, публикация контента.
🔹 В энтерпрайзе: интеграция с CRM/ERP, автоматическая обработка заявок, предиктивная аналитика.
🔹 Для данных: безопасный доступ к профилям, заказам и сторонним API прямо из AI-чатов.

⚡️ Laravel MCP превращает Laravel-приложение в «AI-совместимый» сервис. Теперь вместо кастомных интеграций можно один раз поднять MCP-сервер и позволить ассистентам напрямую использовать ваши бизнес-процессы.

👉 Вопрос: какие функции вы бы первыми открыли для LLM через MCP — генерацию кода, работу с базой или бизнес-логику?

🗂️ Документация

Библиотека пхпшника

#инструменты
🥱83