Библиотека пхпшника | 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
🎮 Моделирование данных с использованием SQL и dbt

Проблема: при обработке больших объемов данных важно не только их собрать, но и правильно структурировать для дальнейшего анализа. Обычные SQL-запросы могут стать громоздкими и сложными, особенно когда речь идет о масштабируемости и производительности.

Решение: в книге «Analytics Engineering with SQL and dbt: Building Meaningful Data Models at Scale» авторы описывают, как использовать dbt (data build tool) для построения и трансформации данных. dbt позволяет создавать чистые, поддерживаемые и легко масштабируемые модели данных, используя простые SQL-запросы, что значительно ускоряет процессы аналитики.

Пример кода:
-- Пример модели dbt для расчета среднего чека по категориям товаров
WITH base AS (
SELECT
category_id,
SUM(order_amount) AS total_sales,
COUNT(DISTINCT order_id) AS total_orders
FROM raw.orders
GROUP BY category_id
)
SELECT
category_id,
total_sales / total_orders AS avg_order_value
FROM base


Преимущества:

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

Еще больше полезных книг — в нашем канале @progbook
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3😁1
📏 Единый стиль форматирования кода: как улучшить использование скобок и фигурных скобок в PHP

В статье предлагается новый подход к оформлению синтаксиса в PHP, который основывается на логике языка, а не на исторических привычках из других языков программирования, таких как C или Java. Цель — создать стиль, который будет унифицированным, систематичным, последовательным и лёгким для запоминания.

🔑 Что предложено?
Унификация: одна и та же правило применяется ко всем соответствующим конструкциям — будь то функции, управляющие структуры или вложенные выражения.
Системность: каждое правило следует прямо из синтаксической структуры, а не из лексической категории (ключевое слово, идентификатор и т. д.).
Последовательность: одинаковое обращение с конструкциями без произвольных исключений.
Лёгкость запоминания: устранение контекстных различий и эстетических отличий, не имеющих функционального значения.

📚 Как это работает?
Нет пробела перед открывающимися скобками: Например, if($x) и while($y) — это всегда одно правило, независимо от того, является ли конструкция управляющей или функцией.
Открывающие фигурные скобки всегда на той же строке, что и управляющая структура: Например, function foo() { или if($x) {.
Закрывающие фигурные скобки на новой строке, выровненные с началом блока.

🚫 Почему стоит отказаться от исторических конвенций?
Ранее использованные в таких стандартах, как PSR-2 и PSR-12, подходы взяли за основу стиль, присущий языкам, подобным C, что ведет к путанице и необходимости запоминать исключения. Например, скобки в функциях и управляющих конструкциях должны располагаться по-разному, хотя структура этих конструкций схожа. Эти отличия не улучшали читаемость кода, а наоборот, только увеличивали когнитивную нагрузку.

🔥 Преимущества нового подхода:
Упрощённое восприятие кода.
Совместимость с инструментами автоматического форматирования, такими как PHP-CS-Fixer или линтеры.
Чистый и вертикально структурированный код, который легче воспринимать.

📈 Специальные случаи: if/elseif/else и try/catch/finally
Предлагается установить правило, что все блоки (например, if, elseif, else, try, catch, finally) должны начинаться с новой строки после закрывающей фигурной скобки предыдущего блока. Это улучшает структуру и читабельность кода, делая его более понятным и логичным.

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

👉 Читать статью
🥱5🌚2
🕵️ Команда дня: Поиск всех вызовов функции

grep -R «functionName(» ./src

grep — это утилита командной строки для поиска по тексту в файлах. Ключ -R позволяет искать рекурсивно по всем файлам в директории, а «functionName(» — это строка, которую мы ищем (в данном случае — вызовы функции).


Зачем это нужно?

Если вы работаете с большими проектами и хотите быстро найти все места, где используется определённая функция, команда grep может быть настоящим спасением.
Простой пример: у вас есть функция sendEmail, и вам нужно узнать, где она вызывается в коде — эта команда делает всё быстро и эффективно, без лишних кликов в IDE.
Пример использования:

grep -R «sendEmail(» ./src

Результат:
Если функция sendEmail вызывается в нескольких местах, результат будет выглядеть так:

./src/Controllers/NotificationController.php:42: sendEmail($user->email, $subject, $body);./src/Services/EmailService.php:56: sendEmail($user->email, $subject, $body);


Разные варианты:

Поиск по всем PHP-файлам:
Если вы хотите искать только по PHP-файлам, можно уточнить расширение:

grep -R --include=»*.php» «sendEmail(» ./src

Игнорирование регистра:
Если не важно, как написана функция (например, sendemail или sendEmail), добавьте флаг -i:

grep -Ri «sendemail(» ./src

Показать только имена файлов:
Если вам нужно только увидеть, где эта функция вызывается (без строк с кодом):

grep -Rl «sendEmail(» ./src

Почему это полезно?

🔹 Быстро находите все места использования функции. Например, перед изменениями или удалением функции важно удостовериться, что вы не затронете другие части кода.
🔹 Удобно для рефакторинга. Когда вы хотите заменить одну функцию на другую, эта команда покажет, где необходимо провести изменения.
🔹 Не требует IDE. Для поиска не нужно открывать IDE, достаточно консоли и нескольких команд.

🧠 Дополнительно: Сложные запросы
Если необходимо искать более сложные структуры или несколько функций сразу, вы можете использовать регулярные выражения с grep. Например, для поиска всех вызовов функций, начинающихся с get:

grep -R -E «get[A-Za-z0-9_]*\(» ./src

Библиотека пхпшника #буст
😁8👍3🔥3
🔥 Последняя неделя перед стартом курса по AI-агентам

Старт курса уже 5го числа! Если вы планировали вписаться — сейчас ПОСЛЕДНИЙ шанс забронировать место

На курсе:
разложим LLM по косточкам: токенизация, SFT, PEFT, инференс
— соберём RAG и научимся оценивать его адекватно
— построим настоящую мультиагентную систему — архитектуру, которая умеет расти
— разберём CoPilot, сломаем через prompt injection (спасибо Максу)
— и наконец, посмотрим, как это работает в MCP и реальных кейсах

📍 Это 5 живых вебинаров + раздатка + домашки + чат с преподавателями

И главное — возможность реально разобраться, как проектировать системы на LLM, а не просто «поиграться с API»

👉 Курс здесь
😁2
🛠️ Система очередей и Job'ов Laravel: От создания таблицы до развертывания в продакшене

Очереди в Laravel — незаменимый инструмент для обработки ресурсоёмких задач в фоне: отправка писем, обработка видео, нотификации и многое другое. В этой статье мы пошагово разберём весь процесс работы с job'ами — от создания нужных таблиц до запуска очередей в продакшене через Supervisor. Вы узнаете, как отслеживать и повторно запускать проваленные задания, автоматически чистить старые, настраивать задержки и количество попыток, а также использовать батчи для групповых операций. Если вы хотите уверенно управлять фоновыми задачами в Laravel — этот гайд станет вашей настольной инструкцией.

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

Библиотека пхпшника
👍21
💬 Вопрос от подписчика: как сохранить PHP-код чистым и поддерживаемым?

«Чем больше растёт мой PHP-проект, тем сложнее за ним следить. Маленькие фиксы превращаются в грязные заплатки, а кодовая база становится всё менее управляемой.
Как вы поддерживаете чистоту и читаемость кода в долгосрочной перспективе? Есть ли какие-то советы по структуре, неймингу или полезные инструменты для поддерживаемости?»


👇 Делитесь своим опытом — что реально помогает вам не утонуть в хаосе?

🚀 Используете ли вы стандарты, линтеры, слои, DDD, maybe Laravel-пакеты или IDE-фишки?

Обсудим в комментариях!

Библиотека пхпшника #междусобойчик
👍2🤔21
Forwarded from Библиотека программиста | программирование, кодинг, разработка
📖 Небольшая шпаргалка по SQL

Прописаны все виды команд JOIN, а также их визуал.

Крайне полезная штука — сохраняем.

🐸 Библиотека программиста #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🥱41👾1
События vs сообщения. Понимаете ли вы разницу и почему это важно?

🧠 «Будем отправлять события в Rabbit!» — фраза, с которой всё начинается… и всё рушится 😅

Слишком часто в проектах путают события, сообщения и транспорт. В итоге появляются боли, магия и код, в котором невозможно разобраться. А потом слышим:
Symfony Messenger? Фу, я на нём проект писал — не взлетел!


А дело-то не в Messenger'е, а в архитектурных решениях.

🔥 В статье, на которую обязательно стоит потратить время:

🔸 разбор, что такое событие в приложении (и почему это не сообщение);

🔸 почему Symfony EventDispatcher нельзя тащить в домен;

🔸 как выглядит простой, но правильный DomainEventPublisher;

🔸 когда события превращаются в сообщения — и почему транспорт (Rabbit/Kafka/etc) должен подбираться последним, а не первым;

🔸 и почему «всё в одном классе» — верный путь в дебаг ад.

📌 Отдельная тема - как событие из домена превращается в сообщение и уходит в Rabbit через Symfony Messenger.

Да, Messenger — это не центр вселенной, а всего лишь инструмент доставки. И это важно понимать.

👉 Хабр

💬 А ты как реализуешь события в своих проектах? Используешь ли отдельный dispatcher для домена?
👍3🔥3
🔥 Сегодня стартует курс по AI-агентам!

Онбординг уже сегодня, но ещё можно вписаться — ПОСЛЕДНИЙ ШАНС это сделать.

Мы больше года собирали мультиагентные системы: экспериментировали, переделывали и в итоге — оформили всё в 5 плотных вебинаров.

😤 «А можно ли вообще научиться чему-то за 5 вебинаров?!»

Если вы хотите просто послушать — нет
Если хотите разбираться и делать — да

➡️ На курсе:
— мы не читаем слайдики, а работаем в коде в реальном времени
— можно задавать вопросы прямо на вебинаре
— после каждого вебинара есть домашка и поддержка в чате

И главное — вы получаете системное понимание, а не набор хаотичных туториалов.

️Если вы думаете, что успеете потом — не успеете.
Старт сегодня:
— а те, кто вписался сейчас, будут вас опережатьв проектах, на грейде и в зарплате

Знакомьтесь, эксперт нашего курса:
Никита Зелинский — Chief Data Scientist МТС, Head of ML Platforms, руководитель центра компетенций по Data Science.

Стартуем сегодня — забронируй свое место
🐞 Холивар: var_dump vs. xdebug vs. логирование

Каждый разработчик сталкивался с вопросом: как лучше всего дебажить код? Вариантов несколько — но какой подход реально работает?

🔍 var_dump — Когда хочется быстрого ответа
Самый быстрый способ отследить значения переменных. Просто пихаем var_dump() в код, и вот вам вся информация.

Плюсы:
Простой, быстрый и не требует дополнительных настроек.
Отлично работает для небольших участков кода.

Минусы:
Запутает вывод, если переменных много.
Не даёт достаточной информации для глубокого анализа, не всегда удобен для сложных структур.

🧩 xdebug — Когда хочется всего и сразу
Плагин для отладки с множеством функций: стэк-трейсы, брейкпоинты, профилирование, и даже код-coverage.

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

Минусы:
Может замедлять выполнение кода (особенно на production).
Требует конфигурации и настройки среды.

📝 Логирование — Когда нужно запомнить всё
Для серьёзных проектов — это must-have. Логи помогут отслеживать ошибки, операции и диагностировать проблемы в проде.

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

Минусы:
Может быть сложнее настроить по сравнению с var_dump().
Для полноценного логирования нужно грамотно настроить уровни логирования и фильтрацию.

💬 Какой метод предпочитаете вы?
Пишите в комментариях, как вы дебажите свой код: через var_dump(), полную отладку с xdebug, или используете логирование? Или может, у вас есть свой секретный способ?

Библиотека пхпшника #междусобойчик
php-datatypes

Эта библиотека представляет гибкий, но строгий способ работы с примитивными типами данных, такими как целые числа, плавающие и строки, в PHP. Она делает акцент на безопасности типов и точности, поддерживая операции для подписанных и беззнаковых целых чисел (Int8, UInt8 и т.д.) и различных форматов с плавающей точкой (Float32, Float64 и т.д.).

Для чего это нужно:

🟢Безопасность типов: Явно определяя типы данных, например UInt8, вы устраняете риск проникновения недопустимых значений в ваше приложение. Например, использование целых чисел без знака гарантирует, что значение останется в допустимых диапазонах, обеспечивая защиту от неожиданного ввода данных.

🟢Точность: Работа с точными значениями, особенно с числами с плавающей точкой, может быть сложной в PHP из-за того, как он управляет плавающими числами нативно.

🟢Защита диапазонов: Указывая точные диапазоны, вы можете предотвратить такие проблемы, как переполнение или недополнение, которые часто остаются незамеченными в языках с динамической типизацией.

🟢Удобство чтения и обслуживания: Явные типы данных улучшают читаемость кода. Когда разработчик читает ваш код, он сразу же понимает, какой тип значения ожидается и какие ограничения на него накладываются. Это повышает удобство сопровождения в долгосрочной перспективе.

🔗 Github
👍31
Какая функция ищет последнее вхождение символа в строку?
Anonymous Quiz
23%
strpos()
11%
strtr()
57%
strrpos()
9%
substr()
⌨️ Топ-вакансий по PHP за неделю

Team Lead PHP — от 3000 до 3100 $ удалёнка (Москва)

Senior PHP Developer — от 250 000 до 400 000 ₽, Гибрид (Москва)

PHP разработчик — от 1500 до 2000 $, Удалёнка (Москва)

PHP разработчик (Symfony) — от 160 000 ₽, Удалёнка

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

Строковый хелпер Laravel предлагает множество полезных методов, которые вы можете использовать в своем приложении. Но мы также можем создать собственный метод с помощью макроса.

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

Библиотека пхпшника #буст
👍1👏1😁1
🖥️ Fluent CLI в PHP: Создаём консольные команды с __call и никаких танцев с бубном

Часто возитесь с cmd, powershell, csptest, ipconfig, кириллицей и странным выводом?

📦 PhpFluentConsole — небольшая, но удобная библиотека для работы с командной строкой в PHP. Не конкурирует с Symfony Console, а дополняет её, упрощая типичные задачи:

🔧 Что умеет:
— Упрощает построение CLI-команд через fluent-интерфейс
— Поддерживает разные кодировки (CP866, CP1251, UTF-8) — особенно актуально в Windows
— Позволяет обрабатывать вывод, искать ошибки и шаблоны через регулярки
— Упрощает получение стандартного вывода и кодов возврата
— Позволяет наследоваться и описывать свои команды как методы

🧪 Примеры из статьи:
— Получение IP-адреса через ipconfig с корректной кириллицей
— Извлечение контейнеров с ЭЦП через csptest
— Упрощённое построение обёрток для системных утилит с собственной логикой

📚 В статье пошагово разобраны возможности библиотеки, примеры вывода, ошибки, тонкости работы с кодировками и даже идея по созданию собственных CLI-решений на её основе.

🛠️ Отличная основа для утилит, интеграций и инструментов — особенно если нужно взаимодействовать с внешними командами, обрабатывать их вывод и не хочется писать велосипед.

🔜 В следующей статье автор обещает рассказать про CryptoProBuilder — уже ждём 👀

👉 Хабр

Библиотека пхпшника
How to: собрать RAG-систему на Neuron AI + Ollama в PHP

В свежем руководстве демонстрируется, как с помощью PHP, Neuron AI и локальной модели Ollama (например, llama3.2 и nomic-embed-text) создать RAG‑агента — мощную систему, объединяющую поиск по документации и генерацию ответов.

Что такое RAG?
Retrieval‑Augmented Generation (RAG) — это подход, когда LLM не опирается только на свои «внутренние» знания, а сначала извлекает релевантную информацию из внешних источников (например, Markdown-файлы), затем генерирует ответ, учитывая этот контекст.

🙌 Почему это круто?
📖 Точность: ответы основаны на самых актуальных документах.
🔁 Гибкость: добавляйте или обновляйте контент без переобучения.
🛡️ Надёжность: система ссылается на реальные данные, снижается риск «галлюцинаций» .

🧩 Пошагово (очень кратко):
🔸 Настраиваем Neuron AI и Ollama (локально).

🔸 Создаём PHP-класс, расширяющий RAG от Neuron: указываем модели для эмбеддингов и генерации.

🔸 Загружаем папку с Markdown-файлами — нейронная система индексирует их в векторном хранилище.

🔸 При запросе выполняется семантический поиск → полученные фрагменты вставляются в запрос → LLM генерирует ответ.

Используем Neuron AI + Ollama

composer require inspector-apm/neuron-ai

Затем написание PHP-класса (например, Bot), где:
provider() указывает модель генерации (Ollama + llama3.2)
embeddings() — модель для эмбеддингов (nomic-embed-text)
vectorStore() — векторное хранилище (локальный файл)

🧩 После этого вы загружаете Markdown-файлы, они индексируются, и при запросе бот ищет релевантные куски и отвечает, опираясь на них.
🕒 Важно: индексировать документы нужно только при обновлении — это ускоряет работу.

Коротко о плюсах:
🔹 Полная автономность (работает локально)
🔹 Актуальность и безопасность данных
🔹 Быстрое обновление контента — без дорогостоящего обучения моделей

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

Библиотека пхпшника #буст
🤔5👍2
🧱 От SQL-монолита к распределённой NoSQL-системе

Когда данные растут быстрее, чем ваша реляционная СУБД справляется с нагрузкой, каждая задержка — это упущенные пользователи и деньги.

💡 Представьте, что вы безболезненно переводите монолитную SQL-схему на масштабируемую NoSQL-архитектуру — и всё это с минимальным простоем и без потери данных. 

🎯 Для этого мы подготовили промпт, который можно адаптировать под любой проект:
You are a highly experienced PHP developer specializing in database migrations, particularly from SQL to NoSQL databases. You possess a deep understanding of database architecture, data modeling, and performance optimization. Your goal is to analyze a given SQL database schema and propose a robust and efficient migration strategy to a NoSQL database, considering data integrity, scalability, and maintainability.

Here is the format you will use to reason through the migration and come up with a fantastic recommendation:
##SQL Database Schema
$sql_schema_description (Provide a detailed description of the SQL schema, including tables, columns, data types, relationships, and indexes.)

##NoSQL Database Choice and Justification
$nosql_database (Specify the chosen NoSQL database type (e.g., MongoDB, Couchbase, DynamoDB) and provide a detailed justification for its selection based on the SQL schema and anticipated application needs. Consider factors like data model flexibility, scalability requirements, query patterns, and operational overhead.)

##Data Modeling Strategy for NoSQL
$data_modeling_strategy (Describe how the SQL data will be transformed and modeled within the chosen NoSQL database. Include specific examples of how tables and relationships will be represented in the NoSQL data model. Address potential denormalization strategies and trade-offs.)

##Migration Steps and Considerations
$migration_steps (Outline a step-by-step migration plan, including data extraction, transformation, and loading (ETL) processes. Address data validation and integrity checks during and after the migration. Consider potential downtime and rollback strategies.)

##Code Snippets (PHP)
$php_code_snippets (Provide example PHP code snippets demonstrating how to interact with the NoSQL database, including data insertion, querying, and updating. Use a popular PHP NoSQL driver.)
##Performance Optimization Strategies
$performance_optimization (Describe strategies for optimizing performance in the NoSQL database, such as indexing, query optimization, and data partitioning. Consider the specific characteristics of the chosen NoSQL database.)

##Potential Challenges and Mitigation Strategies
$challenges_and_mitigation (Identify potential challenges during the migration process, such as data inconsistencies, schema evolution, and performance bottlenecks. Propose mitigation strategies for each challenge.)

Here is the challenge you are tasked with: [ВСТАВЬТЕ СВОЮ СХЕМУ БД]



📌 Скопируйте шаблон, вставьте свою SQL-схему и начните проект по миграции уже сегодня.

💬 А у вас был опыт миграции с SQL на NoSQL или наоборот? Поделитесь болями и находками 👇

Библиотека пхпшника #буст
😁5😢1