TGViewer
Channel Public Channel
Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter

Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter

@phpproglib

Все самое полезное для пхпшника в одном канале.

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

Учиться у нас: clc.to/M561SQ

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

РКН: https://gosuslugi.ru/snet/67a5d13cd6fa92100ee6f68b
Subscribers
10.5K
Photos
1.8K
Videos
31
Links
4.6K

Showing posts older than #6472 · Back to latest

Older Posts 20 shown
Post #6471 2.12K
#байтовый_юмор
  • 😁 22
  • 👍 3
  • ❤ 1
Post #6470 2.15K
👀 Хуки свойств в PHP

В PHP 8.4 появилась долгожданная возможность — хуки свойств.

Это встроенная логика чтения и записи значения прямо в объявлении свойства. Без отдельных методов, без шаблонных getSomething() и setSomething(). Код становится компактнее, выразительнее и проще для сопровождения.

🔹 В чём была проблема

До этого было всего два варианта:

— классический подход с приватными полями и методами доступа;
— promoted-properties из конструктора — удобно, но без логики.

У обоих подходов есть ряд минусов:

— негде аккуратно разместить валидацию;
— сложно добавить логирование изменений;
— неудобно реализовать ленивые вычисления;
— класс быстро разрастался вспомогательными методами.

🔹 Что изменилось с хуками

Теперь PHP позволяет перехватывать:

→ момент чтения свойства;
→ момент записи значения.

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

🔹 Виртуальные свойства

PHP 8.4 позволяет создавать свойства без собственного хранилища.

Такие свойства:

→ не занимают память;
→ вычисляются при каждом обращении;
→ выступают как интерфейс к другим данным объекта.

Полезно для: объединённых представлений данных, вычисляемых значений, и упрощения публичного API модели.

⚠️ Важные ограничения

— хуки несовместимы с readonly-свойствами;
— изменение по ссылке может обойти логику записи;
— не все внутренние функции PHP вызывают хуки одинаково.

🤖 Осталось 4 места на курс по ИИ-агентам. Набор закрывается 30 апреля.
🔗 Успеть на обучение

🔗 Хабр

Библиотека пхпшника
  • ❤ 2
  • 👍 1
  • 🔥 1
Post #6469 2.11K
🪤 Локальный дебаг-сервер без Docker

Ловить дампы через symfony/var-dumper можно, но ограниченно. SMTP, Sentry, Monolog, HTTP-дампы, Ray, бинарные данные — всё это мимо. buggregator/trap собирает всё в одну консоль.

Ставится:
composer require --dev buggregator/trap -W. 


Запускается:
vendor/bin/trap. 


Никакого Docker (написан целиком на PHP).

Функция trap() заменяет dump() и шлёт данные на локальный сервер:

trap($veryDeepArray)->depth(3);

trap($item)->times(3); // не больше 3 дампов

trap($response)->return(); // дампнуть и вернуть значение


Автоматически распознаёт тип трафика на одном порту, так что не нужно открывать отдельные пакеты для var-dumper, SMTP и Sentry. Есть шорткаты: tr() для дампа с возвратом, td() для дампа с die. Плагин для PhpStorm тоже в наличии.

🔗 Репозиторий на GitHub

🐸 Библиотека пхпшника
  • 🔥 9
  • ❤ 2
  • 👍 1
Post #6468 2.04K
🔧 array_key_first() / array_key_last()

Помните, как все делали reset() или array_keys($arr)[0], чтобы получить первый ключ? Начиная с PHP 7.3 есть нативный способ:

php// ❌ старый способ
$key = array_keys($data)[0];

// ✅ чистый нативный
$key = array_key_first($data);
$last = array_key_last($data);

// работает с ассоциативными тоже
$map = ['foo' => 1, 'bar' => 2];
array_key_first($map); // 'foo'


Не мутирует массив (в отличие от reset()), не создаёт лишний массив ключей — просто возвращает ключ или null если массив пустой.

🔥 Пока разбираетесь с массивами — параллельно можно освоить ИИ-агентов. 4 места до 30 апреля.

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

#vardump
  • 🔥 6
  • 👍 1
Post #6467 2.11K
#байтовый_юмор
  • 😁 18
  • 👍 3
  • 💯 2
Post #6466 2K
💬 Обратная связь

Коллеги, давайте соберём базу годных ресурсов по PHP помимо нашего канала.

✔️ Присылайте в комменты:

— Блоги и статьи
— Telegram-каналы
— YouTube-каналы и подкасты
— Репозитории
— Доклады

Что НЕ ищем

Курсы "php с нуля за месяц", базовые туториалы и переводы официальной документации.

💬 Закидывайте в комменты ваши любимые источники. Для работы, для учёбы, для повседневного чтения.
  • 👍 4
  • 🤔 4
  • 🔥 1
Post #6465 1.87K
🔥 База по ИИ-агентам от научного сотрудника Сколтеха и НИУ ВШЭ

Знакомьтесь, Екатерина Трофимова. Кандидат компьютерных наук, ресерчер в Центре ИИ Сколтеха и лаборатории LAMBDA. Она объединяет глубокую академическую экспертизу и практику: знает, как ИИ-системы устроены «под капотом» и как встроить их в реальные проекты (в т.ч. для Т-банка).

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

🛠 Стек и фреймворки:

DSPy — алгоритмическая оптимизация промптов (вместо ручного подбора слов).

Semantic Kernel и LangMem — инструменты для управления сессионной и долгосрочной памятью.

MCP (Model Context Protocol) — новый стандарт от Anthropic для подключения агентов к вашим БД и локальным файлам.

📖 Документация, которую нужно знать:

Anthropic Prompt Caching — как кэшировать контекст и радикально резать косты на API.

OpenAI Agents SDK / Cookbook — лучшие практики работы с памятью.

Augment — платформа для оптимизации работы ИИ-агентов и контроля токенов.

🔬 Хардкорные статьи и препринты (на выходные):

Lost in the Middle — почему LLM «слепнут» на длинных текстах и забывают середину контекста.

How Do Coding Agents Spend Your Money? — куда улетает бюджет при работе автономных кодинг-агентов.

MemGPT — архитектура операционной системы для LLM с иллюзией бесконечной памяти.

InjecAgent / AgentSentry — всё о безопасности и защите агентов от инъекций в промпты.

Екатерина Трофимова — один из ключевых экспертов нашего курса AgentOps. На своих лекциях она детально разбирает, как проектировать инструменты для агентов, как агент принимает решения о вызове инструментов и какие ограничения возникают в реальном проде

🎁 Акция в честь старта продаж!

Прямо сейчас при покупке Инженерного трека вы получаете полный доступ к материалам курса «Разработка ИИ-агентов» в подарок.

👉 Забрать 2 курса по цене 1 и начать обучение
  • ❤ 1
Post #6464 1.89K
#байтовый_юмор
  • 😁 17
  • 👍 6
  • 💯 5
  • ❤ 1
Post #6463 2.17K
⚡️ Laravel: withCount() вместо with() для агрегатов

with('orders') подгружает всю коллекцию моделей в память. Если нужна только цифра — это избыточно.

❌ Антипаттерн

$users = User::with('orders')->get();
// Eloquent грузит все связанные модели в память
// затем PHP считает count() на уже загруженной коллекции

foreach ($users as $user) {
echo $user->orders->count();
}


✅ Правильно

$users = User::withCount('orders')->get();
// Генерирует подзапрос: SELECT count(*) as orders_count
// Один SQL-запрос, ноль лишних объектов в памяти

foreach ($users as $user) {
echo $user->orders_count;
}


Доступные хелперы одного семейства:
User::withSum('orders', 'total')    // orders_sum_total
User::withAvg('reviews', 'rating') // reviews_avg_rating
User::withMin('orders', 'total') // orders_min_total
User::withMax('orders', 'total') // orders_max_total


Каждый из них транслируется в коррелированный подзапрос.
А цепочка из нескольких всё равно будет одни основным SELECT'ом.

Применимо когда:

— рендеришь список с агрегированными метриками;
— строишь API без лишних аллокаций;
— профилируешь и видишь with() там, где нужна только цифра.
  • ❤ 6
  • 👍 4
  • 🔥 1
  • 🥱 1
Post #6458 2.28K
#байтовый_юмор
  • 😁 38
  • 🔥 1
Post #6457 2.15K
🗓 В следующий вторник (28.04) в 19:00 встречаемся в онлайне.

Тема:
Как эффективно управлять контекстным окном LLM в мультиагентных системах и не сливать бюджет на токены


В кружке Кирилл Кухарев рассказал, какие именно подходы будем разбирать.

👉 Занять место на вебинаре
Post #6456 2.13K

This post (sticker, poll or similar) has no web preview. Open in Telegram

  • 🥱 2
  • 🤔 1
Post #6455 2.22K
Сохраняйте шпаргалку по командам git
  • 👏 2
  • ❤ 1
  • 👍 1
Post #6454 2.05K
🔥 Вечный вопрос PHP-разработчика

Наш подписчик спрашивает:

«Работаю в компании 2 года. Достался огромный легаси-проект на PHP 7.1. Всё в кучу, тесты не писались никогда. Меня просят его "улучшать" параллельно с фичами. Как вообще подступиться? Рефакторить по-тихому или настаивать на переписывании? И как объяснить бизнесу, что технический долг — это реальная проблема, а не моё нытьё?»
— Дмитрий, PHP Developer


💬 Делитесь в комментариях

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

P.S. Если хотите задать вопрос, заполните нашу гугл-форму. Это займет 5 минут.

#междусобойчик
  • 😁 9
  • ❤ 2
  • 👍 2
Post #6453 2.16K
⚙️ Полезный инструмент для работы с JSON

JSON-файлы с высокой вложенностью часто сложно прочитать.
𝐉𝐬𝐨𝐧𝐂𝐫𝐚𝐜𝐤 создает графические диаграммы из JSON-файлов и делает их легко читаемыми.
Кроме того, созданные диаграммы можно скачать в виде изображений.

Также поддерживает YAML и XML форматы.
  • 👍 5
  • 🔥 1
  • 😁 1
Post #6452 1.81K

Forwarded from Библиотека собеса по PHP | вопросы с собеседований

Объясни разницу между Gate и Policy в Laravel?

Оба инструмента для авторизации, но с разной областью применения.

Gateпростые одиночные проверки, не привязанные к модели:

// Определяем в AuthServiceProvider
Gate::define('access-admin-panel', function (User $user) {
return $user->is_admin;
});

// Проверяем
if (Gate::allows('access-admin-panel')) { ... }
// или в контроллере
$this->authorize('access-admin-panel');


Policy класс с набором правил для конкретной модели:

// php artisan make:policy PostPolicy --model=Post
class PostPolicy
{
public function update(User $user, Post $post): bool
{
return $user->id === $post->user_id;
}

public function delete(User $user, Post $post): bool
{
return $user->id === $post->user_id || $user->is_admin;
}
}

// Использование
$this->authorize('update', $post);


Правило выбора

— Нет модели → Gate
— Есть модель, несколько действий → Policy
  • 👍 6
  • ❤ 1
  • 🔥 1
Post #6451 1.78K
⚡️ Мы рады представить команду экспертов курса AgentOps!

Дмитрий Антипов расскажет, как грамотно проверить работу AI-моделей
Курилл Кухарев поделится, почему компаниям выгодно использовать локальные модели и как их развернуть
Андрей Носов расскажет, как работать с данными и знаниями в AI-системах: построение RAG, выбор подходов к поиску и организация хранения данных
Антон Будняк разберет, как обеспечить устойчивость сервиса, в котором используется ИИ
Александр Ошурков расскажет, как оценивать качество работы LLM в backend-сервисах
Екатерина Трофимов разберет, как проектировать инструменты для AI-агентов и выстраивать взаимодействие с внешними сервисами

Курс для backend-разработчиков, тимлидов и LLM инженеров о том, как внедрять AI-логику в бэкенд IT-продуктов и сохранять стабильность сервиса.

К концу обучения вы получите:

• Структурированный подход к архитектуре и деплою AI-агентов
• Навыки настройки мониторинга, тестирования и контроля расходов на токены
• Разбор сложных инженерных кейсов из реальной практики

🎁 Доступ к материалам курса
«Разработка ИИ-агентов» в подарок при покупке Инженерного трека

👉 Все подробности и программа обучения.
  • 🥱 3
  • 😁 1
Post #6450 1.9K
#байтовый_юмор
  • 😁 33
  • 💯 11
  • 🔥 2
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →