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

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

Відкрити в Telegram

Все самое полезное для пхпшника в одном канале. По рекламе: @proglib_adv Учиться у нас: https://proglib.io/w/bca892d6 Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5d13cd6fa92100ee6f68b

Показати більше

📈 Аналітичний огляд Telegram-каналу Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter

Канал Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter (@phpproglib) у мовному сегменті Російська є активним учасником. На даний момент спільнота об'єднує 10 712 підписників, посідаючи 11 598 місце в категорії Технології та додатки та 61 274 місце у регіоні Росія.

📊 Показники аудиторії та динаміка

З моменту свого створення невідомо, проект продемонстрував стрімке зростання, зібравши аудиторію у 10 712 підписників.

За останніми даними від 05 червня, 2026, канал демонструє стабільну активність. Хоча за останні 30 днів спостерігається зміна кількості учасників на -34, а за останні 24 години на -1, загальне охоплення залишається високим.

  • Статус верифікації: Не верифікований
  • Рівень залученості (ER): Середній показник залученості аудиторії становить 15.28%. Протягом перших 24 годин після публікації контент зазвичай збирає 9.13% реакцій від загальної кількості підписників.
  • Охоплення публікацій: В середньому кожен допис отримує 1 637 переглядів. Протягом першої доби публікація в середньому набирає 978 переглядів.
  • Реакції та взаємодія: Аудиторія активно підтримує контент: середня кількість реакцій на один пост – 11.
  • Тематичні інтереси: Контент зосереджений навколо ключових тем, таких як php, laravel, пхпшника, artisan, api.

📝 Опис та контентна політика

Автор описує ресурс як майданчик для висловлення суб'єктивної думки:
Все самое полезное для пхпшника в одном канале. По рекламе: @proglib_adv Учиться у нас: https://proglib.io/w/bca892d6 Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5d13cd6fa92100ee6f68b

Завдяки високій частоті оновлень (останні дані отримано 06 червня, 2026), канал підтримує актуальність та високий рівень охоплення публікацій. Аналітика показує, що аудиторія активно взаємодіє з контентом, що робить його важливою точкою впливу в категорії Технології та додатки.

10 712
Підписники
-124 години
-97 днів
-3430 день
Архів дописів
 ♻️ Redis-кеш с AI Настроить кеш через Redis несложно. Но зачем копировать код из старого проекта, бояться что-то потерять, когда можно сгенерировать эту часть. Промпт, который закроет этот вопрос:
Ты Senior PHP-разработчик. Сгенерируй модуль кеширования для Laravel с Redis, с учётом всех современных паттернов, устойчивости и тестирования. Требования: Использование Redis через phpredis или predis (с учётом конфигурации в .env) Кеширование с разными TTL для разных типов данных (разделение по Cache Store) 2 сервиса с кешированием: Стратегия cache-aside (чтение из кеша и обновление вручную) Стратегия write-through (автоматическое обновление кеша при записи данных) Обработка инвалидации кеша при изменении данных Кастомная обработка ошибок: Fallback на in-memory или file cache (без исключений при недоступности Redis) Логирование ошибок кеширования с уведомлением Применение circuit breaker и retry паттернов при сете ошибок Redis Защита от слишком частых запросов через кеширование с TTL и expiration для разных кешей Изоляция кеш-слоя с использованием сервисов и репозиториев (не Cache фасад в контроллерах) Настройки в .env и конфигурации кеша Простой и понятный конфиг с разделением кешей для разных типов данных Юнит-тесты с использованием Testcontainers для запуска Redis в Docker Тестирование fallback-механизмов Мокирование с имитацией недоступности Redis Тесты на использование кеша с разными TTL Стек: PHP 8.1+, Laravel 9.x, Redis, PHPUnit, Docker, Testcontainers
Библиотека пхпшника

🧠 PHP-лайфхак Хочешь ловить баги до запуска кода? Используй статический анализ. Это инструмент, который проверяет твой PHP-код на ошибки, несоответствия типам и подозрительные конструкции — без выполнения программы. 🔍 Как это работает 🧩 Установи PHPStan: composer require --dev phpstan/phpstan Запусти анализ: ./vendor/bin/phpstan analyse src --level=max --level=max включает максимально строгую проверку. Можно использовать уровни от 0 до 9 — начни с 5–6, чтобы не утонуть в предупреждениях. ⚡️ Что даёт PHPStan / Psalm 🐞 Находит ошибки типов ещё до запуска кода 🚫 Предупреждает о неиспользуемых переменных и мёртвом коде 🧩 Помогает навести порядок в архитектуре 🔒 Снижает риск багов при рефакторинге 💡 Интеграция с Composer и CI/CD Добавь команду в composer.json: "scripts": { "analyze": "phpstan analyse src --level=max" } Теперь можно запускать проверку просто: composer analyze А в CI — добавить шаг перед деплоем, чтобы ни один коммит с ошибками типов не ушёл в прод. Библиотека пхпшника

⌨️ Топ-вакансий по PHP за неделю PHP Developer (Laravel) - 150 000 - 200 000₽ - офис/гибрид/удалёнка (Ульяновск) Backend-разработчик (PHP) - до 220 000 ₽ - офис/гибрид (Москва) Старший fullstack-разработчик PHP (Laravel) - от 300 000 до 350 000 ₽ - удалёнка ➡️ Еще больше топовых вакансий — в нашем канале PHP Jobs

#байтовый_юмор
#байтовый_юмор

💬 Давайте обсудим К статье на Хабре «Я два месяца платил 300к человеку, который тихо скармливал мои задачи в ChatGPT» уже почти 900 комментов. Что думаете, пишите в комменты? #междусобойчик

📊 readonly properties vs private + getter До 8.1 иммутабельность в value objects эмулировали через private + геттер. Это работало, но создавало шум: конструктор, приватное свойство, метод. Три места ради одной идеи.
// До
class Money {
    private int $amount;
 
    public function __construct(int $amount) {
        $this->amount = $amount;
    }
 
    public function getAmount(): int {
        return $this->amount;
    }
}
readonly убирает весь этот церемониал:
// После
class Money {
    public function __construct(
        public readonly int $amount,
    ) {}
}
Читается как контракт: свойство публично, но записать его можно только один раз при инициализации. Повторная запись → Error, не предупреждение. Когда readonly не подходит: 1. Нужна ленивая инициализация. readonly нельзя присвоить вне конструктора (до PHP 8.4 с хуками). 2. Клонирование с изменением. clone с readonly требует PHP 8.3 (readonly классы + clone в new static). 3. Моки в тестах. Если тест хочет подменить значение readonly-свойства через рефлексию, получит Error. PHP 8.2 добавил readonly классы — все свойства автоматически readonly:
readonly class Coordinates {
    public function __construct(
        public float $lat,
        public float $lng,
    ) {}
}
Хорошо для DTO, value objects, команд и событий. Плохо там, где нужна мутация или частичная инициализация. Правило простое: если объект концептуально иммутабелен → readonly. Если есть хоть одна причина менять состояние после создания → private + логика в методах. 🐸 Библиотека пхпшника #элементарный_выбор

Что действительно ускоряет автозагрузку на проде?
Anonymous voting

🔍 Убийца перфоманса, который можно пропустить в ревью Классика, которую все знают, но продолжают допускать. Особенно в Eloquent. 🔹 Проблема
$orders = Order::all();
 
foreach ($orders as $order) {
    echo $order->user->name; // SELECT * FROM users WHERE id = ? (на каждой итерации!)
}
🔹 Решение — eager loading
$orders = Order::with('user')->get();
// Теперь 2 запроса вместо N+1
🔹 Как поймать в проде Подключите debugbar или telescope в dev-среде. Или логируйте запросы вручную:
DB::listen(function ($query) {
    Log::info($query->sql, $query->bindings);
});
💡 Если видите один и тот же запрос десятки раз в логах — это он. Ищите все места, где обращаетесь к связям внутри цикла. Библиотека пхпшника #vardump

Точки роста PHP-разработчика Наш подписчик спрашивает
«Я PHP-разработчик с опытом 1,5 года. Но ощущаю, что топчусь на месте. Какие навыки стоит развивать, чтобы сдвинуть с мертвой точки через год-два ? Углубляться в фреймворки или лучше прокачивать soft skills?» Алексей, PHP Developer
💬 Делитесь в комментариях: — Какие технические навыки необходимы для роста — Насколько важны фреймворки и архитектура — Какие soft skills действительно ценят P.S. Если хотите задать вопрос, заполните нашу гугл-форму. Это займет 5 минут. #междусобойчик

✔️ PHP-тест: Typed Properties + Lazy Initialization + Объект в статике Баг, который живёт в проде месяцами и проявляется только под нагрузкой 👇 📦 Задание Команда пишет модуль биллинга. Ты написал быстрый класс-обёртку для работы с тарифами. Код прошёл ревью, всё работало на стейджинге. В проде через неделю начались жалобы: у части пользователей неправильно считается стоимость. Причём только в пиковые часы.
// src/Billing/TariffCalculator.php
class TariffCalculator
{
    private static TariffConfig $config;
    private static array $cache = [];

    public static function init(array $rawConfig): void
    {
        self::$config = new TariffConfig($rawConfig);
    }

    public static function calculate(int $userId, int $units): float
    {
        $key = $userId . ':' . $units;

        if (isset(self::$cache[$key])) {
            return self::$cache[$key];
        }

        $price = self::$config->getBasePrice()
            * $units
            * self::$config->getUserMultiplier($userId);

        self::$cache[$key] = $price;

        return $price;
    }

    public static function resetCache(): void
    {
        self::$cache = [];
    }
}

// src/Billing/TariffConfig.php
class TariffConfig
{
    private float $basePrice;
    private array $multipliers;

    public function __construct(array $config)
    {
        $this->basePrice   = (float) $config['base_price'];
        $this->multipliers = $config['multipliers'] ?? [];
    }

    public function getBasePrice(): float
    {
        return $this->basePrice;
    }

    public function getUserMultiplier(int $userId): float
    {
        return $this->multipliers[$userId] ?? 1.0;
    }
}

// bootstrap.php — вызывается один раз при старте воркера
TariffCalculator::init(loadConfigFromDB());

// Где-то в обработчике запроса
$price = TariffCalculator::calculate($user->id, $request->units);
🔹 Задачи — Найти все архитектурные и логические проблемы в коде (их несколько) — Объяснить, почему баг проявляется только под нагрузкой и не воспроизводится на стейджинге — Предложить правильное решение Ставьте → 🔥 если нравится формат. Если нет → 🌚 💬 Решения пишите в комменты под спойлер — сравним подходы.

Почитали тут свежий отчёт по рынку ИИ-ускорителей в РФ: оказывается, 54% компаний тормозят внедрение ИИ исключительно из-за конских цен на инфраструктуру. Ну, то есть написать пет-проект с вызовом API это задача на вечер, а вот запустить агента в продакшн так, чтобы он не сжёг бюджет отдела за неделю — суровая инженерия. По сути, сейчас мало уметь собирать RAG. Нужно считать токены, настраивать time-travel дебаг в LangGraph и уметь роутить запросы на лету. Всё это мы учли в обновлённом курсе по разработке AI-агентов, где акцент сделан именно на AgentOps и жёсткий контроль ресурсов. Также в программе: — оценка качества, трейсинг и защита от деградации пайплайнов; — мультиагентные паттерны и интеграция по протоколу MCP; — локальный деплой Open Source под 152-ФЗ (когда данные нельзя выносить наружу). Кажется, это единственный адекватный roadmap по переходу от блокнотов к enterprise-решениям. Прямо сейчас можно урвать курс с увесистой скидкой (49 000 ₽ 62 990 ₽ за базовый тариф и 99 000 ₽ 124 990 ₽ за продвинутый трек), но стоит поторопиться — на потоке осталось всего 5 мест. 👉 Зафиксировать цену и начать собирать агентов, за которых не стыдно в проде

⚙️ Laravel Process Pipe С версии Laravel 10.7 появилась нативная поддержка конвейера процессов (pipe). Теперь можно легко передавать вывод одного процесса на вход другого — прямо из PHP-кода, без костылей.
use Illuminate\Process\Pipe;
use Illuminate\Support\Facades\Process;

$result = Process::pipe(function (Pipe $pipe) {
    $pipe->command('cat example.txt'),
    $pipe->command('grep -i "laravel"'),
});

if ($result->successful()) {
    // ...
}
Это аналог привычного cat example.txt | grep -i "laravel" в терминале, только внутри Laravel. Зачем это нужно? — Обработка файлов и потоков данных без временных переменных — Чистый и читаемый код вместо вызовов shell_exec — Удобное тестирование через фейковые процессы Маленькая фича, но приятная 🙂 Библиотека пхпшника #vardump

Почитали тут свежий отчёт по рынку ИИ-ускорителей в РФ: оказывается, 54% компаний тормозят внедрение ИИ исключительно из-за конских цен на инфраструктуру. Ну, то есть написать пет-проект с вызовом API это задача на вечер, а вот запустить агента в продакшн так, чтобы он не сжёг бюджет отдела за неделю — суровая инженерия. По сути, сейчас мало уметь собирать RAG. Нужно считать токены, настраивать time-travel дебаг в LangGraph и уметь роутить запросы на лету. Всё это мы учли в обновлённом курсе по разработке AI-агентов, где акцент сделан именно на AgentOps и жёсткий контроль ресурсов. Также в программе: — оценка качества, трейсинг и защита от деградации пайплайнов; — мультиагентные паттерны и интеграция по протоколу MCP; — локальный деплой Open Source под 152-ФЗ (когда данные нельзя выносить наружу). Кажется, это единственный адекватный roadmap по переходу от блокнотов к enterprise-решениям. Прямо сейчас можно урвать курс с увесистой скидкой (49 000 ₽ 62 990 ₽ за базовый тариф и 99 000 ₽ 124 990 ₽ за продвинутый трек), но стоит поторопиться — на потоке осталось всего 5 мест. 👉 Зафиксировать цену и начать собирать агентов, за которых не стыдно в проде

#байтовый_юмор
#байтовый_юмор

🐘 PHP для начинающих (и напоминание для опытных) 🔹 Query Scopes Смотришь на свой код и замечаешь одно и то же в пяти местах:
->where('status', 'active')->where('deleted_at', null)
->where('status', 'active')->where('deleted_at', null)
->where('status', 'active')->where('deleted_at', null)
Это не переиспользование кода. Это его копирование. Разница важная. ▪️ Local Scope — прячем логику в модель
// User.php
public function scopeActive(Builder $query): Builder
{
    return $query->where('status', 'active')
                 ->whereNull('deleted_at');
}

public function scopeVerified(Builder $query): Builder
{
    return $query->whereNotNull('email_verified_at');
}
Теперь вместо цепочки условий — читаемый вызов
// Было
User::where('status', 'active')
    ->whereNull('deleted_at')
    ->whereNotNull('email_verified_at')
    ->get();

// Стало
User::active()->verified()->get();
▪️ Scope с параметром Иногда нужна гибкость. Scope принимает аргументы:
public function scopeOlderThan(Builder $query, int $days): Builder
{
    return $query->where('created_at', '<', now()->subDays($days));
}
phpUser::active()->olderThan(30)->get();
▪️ Global Scope — когда условие должно быть всегда Если SoftDeletes работает по всему приложению — это глобальный скоуп под капотом. Можно написать свой:
// В модели
protected static function booted(): void
{
    static::addGlobalScope('tenant', function (Builder $builder) {
        $builder->where('tenant_id', auth()->user()?->tenant_id);
    });
}
Теперь все запросы к этой модели автоматически фильтруются по тенанту. Без единого where в контроллерах. Скоупы — это словарь твоей предметной области. Когда читаешь User::active()->verified() — понимаешь смысл без погружения в детали. Это и есть чистый код. Библиотека пхпшника #php_азбука

👀 Reli — профилировщик выборки или памяти Это профилировщик, написанный на PHP, который считывает информацию о запуске вирту
👀 Reli — профилировщик выборки или памяти Это профилировщик, написанный на PHP, который считывает информацию о запуске виртуальной машины PHP извне процесса. Вы можете обнаружить узкие места производительности или утечки памяти в своих скриптах, не меняя целевой скрипт и не загружая расширения. 🔗 Github #инструменты

#байтовый_юмор
#байтовый_юмор

⌨️ Топ-вакансий по PHP за неделю PHP разработчик (Symfony, Rest API) — от 100 000 до 150 000 ₽ — удалёнка Middle PHP разработчик — от 150 000 до 250 000 ₽ — гибрид/удалёнка (Воронеж) Team Lead (PHP, Laravel) — от 500 000 ₽ — удалёнка/гибрид (Москва) ➡️ Еще больше топовых вакансий — в нашем канале PHP Jobs

Зачем использовать yield вместо return с массивом? yield превращает функцию в генератор. Вместо того чтобы собрать все данные в массив и вернуть целиком, функция отдаёт значения по одному, по мере запроса. Главный профит — память. Если обрабатываешь CSV на 500 тысяч строк, с массивом ты загрузишь всё в RAM разом. С генератором в памяти живёт одна строка. Генератор реализует интерфейс Iterator, с ним работает foreach. Минус — нельзя перемотать назад, обойти можно только один раз. Используй когда данных много, порядок линейный, и случайный доступ не нужен.

Кажется, мы окончательно перешли от игрушек к суровому AgentOps Приглашаем на наш обновлённый курс по разработке ИИ-агентов. Никакой воды про «будущее нейросетей», только инженерный подход. Что внутри: — пошагово строим готовые системы на LangGraph, CrewAI и MCP; — настраиваем кэширование и роутинг, чтобы бот не сожрал токены; — разбираемся со стейтом, учимся дебажить через time-travel и прикручиваем human-in-the-loop; — выводим RAG в прод так, чтобы безопасники не завернули архитектуру из-за 152-ФЗ. В пекло скучные лекции про общую инфраструктуру — сразу фокусируемся на агентных фреймворках и написании кода. Занятия ведут бывалые лиды из Газпромбанка и Альфы, набившие шишки на реальных задачах.
Кстати, на днях мы пилили агента в прямом эфире, если пропустили — есть запись вебинара.
Сегодня последний день, когда можно забрать курс по старым ценам. Базовый тариф сейчас стоит 49 000 ₽ (вместо 62 990 ₽), продвинутый трек — 99 000 ₽ (вместо 124 990 ₽). Если не хочется отдавать всю сумму сразу, есть рассрочка. Торопитесь — на потоке осталось всего 5 мест! → Зафиксировать цену и перейти к сборке своих агентов