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

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

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

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

РКН: https://gosuslugi.ru/snet/67a5d13cd6fa92100ee6f68b
Download Telegram
🎄 С Новым годом, коллеги!

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

Небольшое напоминание на праздники
Коллеги, давайте в эти дни немного выдохнем.
🧠 Переключимся от дедлайнов и продакшена
Дадим мозгу восстановиться
📚 И, самое главное, спокойно вспомним лучшие посты этого года, начиная с завтрашнего дня

Впереди новый год — с новыми версиями PHP, свежими подходами, более сложными задачами и, надеюсь, более осознанной разработкой.

Спасибо, что читаете, обсуждаете и думаете вместе.
Хороших праздников, чистого кода и спокойных логов 🎆

Библиотека пхпшника
👍9🎉83
🚀 Pipe operator в PHP 8.5 — меньше вложенности, больше читаемости

PHP 8.5 завез мощную штуку — оператор пайпа (|>), и это реально меняет стиль кода.

Раньше:

$result = trim(str_shuffle(strtoupper("Hello World")));


Или ещё хуже — с кучей временных переменных:

$result = "Hello World";
$result = strtoupper($result);
$result = str_shuffle($result);
$result = trim($result);

Теперь:
$result = strtoupper("Hello World")
|> str_shuffle(...)
|> trim(...);

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

🎯 Реальный пример: обработка email'а из формы

$result = $_REQUEST['email']
|> fn($e) => strtolower($e)
|> fn($e) => filter_var($e, FILTER_VALIDATE_EMAIL)
|> fn($e) => sendEmail($e, "Welcome!");

echo $result ? "Sent!" : "Error";

🔥 Минимум шума, максимум сути.

Pipe — мелкая синтаксическая штука, но она делает код ближе к тому, как вы мыслите.
С PHP 8.5 пишем как люди.

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

#лучшее2025
Please open Telegram to view this post
VIEW IN TELEGRAM
26🤔5🥱2
💾 Новый тренажёр по SQL

Разработчик создал SQL Noir — интерактивную детективную игру, где расследования ведутся с помощью SQL-запросов.

Погружаешься в сюжет и решаешь загадки с реальными SQL-запросами.

🔗 Ссылка

#лучшее2025
10👍5
Laravel: Менее известные, но полезные команды Composer

Composer — это основной инструмент для управления зависимостями в PHP. Если вы работаете с Laravel, то наверняка уже знакомы с такими командами, как composer install и composer update. Однако у Composer есть менее известные, но очень полезные команды, которые могут значительно упростить вашу работу над проектом.

1. composer outdated
Эта команда показывает, какие зависимости вашего проекта устарели. Она выводит список всех пакетов, для которых доступны более новые версии, указывая текущую и последнюю версии. Это удобный способ следить за обновлениями и безопасностью проекта без необходимости сразу обновлять все пакеты.

2. composer show
С помощью этой команды можно получить подробную информацию обо всех установленных пакетах. Кроме того, если указать конкретное имя пакета, можно узнать его описание, текущую версию и зависимости. Например:

composer show backpack/crud

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

3. composer why
Если вы хотите понять, почему определённый пакет установлен в проекте, используйте команду composer why. Она покажет, какие зависимости требуют установки данного пакета. Это особенно полезно для анализа сложной цепочки зависимостей.

4. composer licenses
Для проверки лицензий всех установленных зависимостей существует команда composer licenses. Она помогает убедиться, что все используемые пакеты соответствуют необходимым требованиям по лицензированию, что особенно важно при работе с открытым исходным кодом.

5. composer check-platform-reqs
При работе на разных платформах может возникнуть необходимость убедиться, что все необходимые расширения PHP установлены. Команда composer check-platform-reqs проверяет, соответствует ли ваша система требованиям, указанным в composer.json. Она также проверяет версию PHP и расширения.

#лучшее2025
😁4👍32
👔💼 Как ответить на собеседовании, почему вы уволились с прошлого места работы: 9 вариантов ответа

А также примеры того, как говорить точно не надо 🌚

👉Читать

#лучшее2025
1
PHP и AI-агенты: современный стек для 2026 года

Думаешь, AI — это только про Python? Современный PHP-разработчик должен уметь интегрировать автономные системы в свои проекты. Пока все празднуют, изучи то, что выделит тебя на рынке в новом году.

На курсе «Разработка AI-агентов» ты научишься:

— строить ReAct-агентов, которые сами выполняют задачи;
— оркестровать флоу через n8n и связывать их с PHP-бэкендом;
— внедрять протокол MCP для командной работы агентов;
— использовать RAG для поиска по документации.

🎄 До 12 января забирай курс в рамках акции «3 в 1» (ещё 2 курса в подарок).

Апгрейднуть карьеру
🔗Реализация паттерна Chain of Responsibility на примере котиков в PHP

Если вы когда‑нибудь пытались настроить бизнес‑логику в своём проекте так, чтобы она не выглядела как свалка if-else и работала хорошо, то этот материал для вас.

Сегодня вы узнаете один из самых приятных паттернов — Chain of Responsibility, или «Цепочка обязанностей».

👉Хабр

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

#лучшее2025
1🤔1
PVM — менеджер версий PHP

Простой bash-скрипт для управления несколькими версиями PHP в Unix-системах(в том числе MacOS).

Установка через Curl:
curl -o /usr/local/bin/pvm https://raw.githubusercontent.com/smoqadam/pvm/main/pvm
chmod +x /usr/local/bin/pvm
export PATH="$HOME/.pvm/current:$PATH»

🔗Github

#лучшее2025
👍91👾1
🔹 PHP разбор: что использовать и когда? 🔹

Сегодня сравним isset() vs empty() vs is_null() — функции для проверки переменных в PHP. Когда какую применять? 🤔

isset($var) — Проверяет, существует ли переменная и не равна ли она null.
🔹 isset($var)false, если $var = null; или переменная не объявлена.
🔹 isset($var) → true, если $var = «», 0, false, [], но НЕ null.

empty($var) — Проверяет, считается ли переменная «пустой» (falsey значением).
🔹 empty($var)true, если $var = «», 0, false, null, [], «0».
🔹 empty($var) → false, если $var = «abc», 123, [1,2,3].

is_null($var) — Проверяет, является ли переменная строго null.
🔹 is_null($var)true, только если $var = null.
🔹 is_null($var)false, если $var существует и имеет любое другое значение (даже «», 0, false).

📌 Когда что использовать?
🔹 isset($var) → Проверяем, существует ли переменная.
🔹 empty($var) → Проверяем, «пустая» ли она (falsey).
🔹 is_null($var) → Проверяем, является ли null.

✍️ А какую функцию вы чаще используете в своих проектах?

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

#лучшее2025
6😁2
🧠 Ковариантность и контравариантность в PHP — кратко и по сути

Эти термины звучат сложно, но суть у них простая. Разработчики используют их идеи постоянно — просто не всегда знают, как это называется. Ниже — простое объяснение с примерами.

🔍 Что это такое?

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

Контравариантность — когда метод принимает менее конкретный тип, чем у родителя.

Ковариантность (return types)
PHP поддерживает ковариантность только для возвращаемых значений. Примеры:

float|intint

BaseClassChildClass

ExportableExportable&Cacheable

Можно «сузить» возвращаемый тип в дочернем классе — и это будет валидно.

Контравариантность в return'ах
PHP не позволяет делать возвращаемый тип менее конкретным.
Например, int → float|int — вызовет ошибку.

Контравариантность (параметры)
А вот с параметрами всё наоборот — здесь PHP позволяет делать типы шире:

arrayarray|Collection

Traversable&CollectionCollection

EloquentCollectionCollection

Такой подход делает методы более гибкими при переопределении.

Ковариантность в параметрах
Нельзя в параметрах делать тип более конкретным, чем у родителя. Это приведёт к ошибке.

🚫 Конструкторы — отдельная история
Ковариантность и контравариантность на конструкторы не влияют. У них своя логика, и они не наследуются как обычные методы.

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

#лучшее2025
👍51
🚀 Как ускорить массовую отправку HTTP-запросов в PHP

🔍 Постановка задачи:
Есть скрипт на PHP, который должен отправлять множество HTTP-запросов. Нужно сделать это как можно быстрее. Очевидное решение — параллельная отправка.

🔧 Шаг 1: последовательная обработка
Простой цикл с curl_init() и curl_exec() на каждый URL. Результат: 10 запросов выполняются за ~4.4 секунды.

⚙️ Шаг 2: повторное использование curl-хэндла
Инициализируем curl один раз и переиспользуем. Время выполнения снижается до ~1.7 секунды.

Шаг 3: параллельная отправка с curl_multi_
Используем curl_multi_init() и запускаем запросы одновременно. Итог: всего 0.5 секунды на 10 запросов. Почти в 9 раз быстрее, чем изначально.

📦 Шаг 4: отправка батчами (batching)
Если запросов сотни или тысячи, одновременно всё не потянет даже мощный сервер. Решение — отправка пакетами, например по 3. Это позволяет контролировать нагрузку. В нашем примере — ~0.8 секунды на 10 запросов.

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

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

#лучшее2025
📊 FastExcelWriter: Лёгкое и быстрое создание Excel-файлов на PHP

Если вы сталкивались с генерацией больших Excel-файлов на PHP, вы, вероятно, знакомы с PhpSpreadsheet. Хотя она функциональна, при работе с большими данными возможны проблемы с производительностью и потреблением памяти.

👨‍💻 FastExcelWriter — альтернатива PhpSpreadsheet с упором на скорость и экономию ресурсов. Вместо хранения данных в памяти, библиотека пишет строки напрямую в файл, снижая нагрузку на систему.

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

🚀 Генерация файлов в 7–9 раз быстрее PhpSpreadsheet
💾 Минимальное потребление памяти благодаря построчной записи
🎨 Поддержка стилей, форматирования, изображений, диаграмм и примечаний
🧩 Простой и лаконичный API для разработчиков

👉 Хабр

#лучшее2025
👍82👾1
💬В Laravel есть хелпер Number для простого и удобного форматирования цифровых значений.

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

#лучшее2025
👍11
🔧 Нужен ли 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

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

#лучшее2025
👍15
PHP и AI-агенты: сделайте ваш бэкенд умнее в 2026-м

Кто сказал, что PHP не для ИИ? В новом году мы учим пхпшников встраивать автономных агентов в Laravel и Symfony проекты. Пусть боты разгребают почту, модерируют контент и пишут API-документацию за вас.

На курсе вы узнаете:

— как работают ReAct-агенты;
— как связать n8n с вашим PHP-кодом;
— как использовать протокол MCP для командной работы ботов.

🎄 Успейте до 12 января забрать курс по акции «3 в 1». Это ваш билет в мир современного IT.

Ускорить разработку
🚀 Тюнинг производительности PHP-FPM

Правильная настройка PHP-FPM имеет решающее значение для эффективного использования ресурсов сервера. Вот несколько ключевых параметров для оптимизации производительности:

🔧 Основные параметры:
pm = dynamic
Управляет количеством рабочих процессов. В режиме dynamic количество процессов изменяется в зависимости от нагрузки сервера.
pm.max_children = 1000
Максимальное количество рабочих процессов. Высокие значения могут привести к ошибкам из-за нехватки памяти. Пример: для 1000 процессов × 100MB/процесс потребуется 100GB RAM.
pm.start_servers = 80
Количество процессов, которое будет запущено при старте PHP-FPM для быстрой обработки начальной нагрузки.
pm.min_spare_servers = 40
Минимальное количество «запасных» процессов, которые должны оставаться в ожидании.
pm.max_spare_servers = 120
Максимальное количество неактивных процессов. Если их больше, лишние процессы будут завершаться.
request_terminate_timeout = 300s
Ограничение времени для запроса — если выполнение длится более 5 минут, процесс будет завершен.
request_slowlog_timeout = 5s
Все запросы, которые выполняются более 5 секунд, записываются в лог для анализа производительности.

📊 Рекомендации:
Для серверов с меньшим объёмом памяти, например 8GB RAM, настройте:

pm = dynamic
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20

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

👉 Поделитесь этим постом с коллегами!

🔗 Ссылка на статью

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

#лучшее2025
👍4
🚀 PHP 8.6: Partial Function Application (PFA)

Меньше шаблонного кода. Больше смысла в колбэках.

В PHP 8.6 появляется Partial Function Application — механизм, который позволяет частично вызывать функцию, фиксируя одни аргументы и оставляя «дырки» для остальных. В результате возвращается готовый Closure с автоматически выведенной сигнатурой.

🧠 Что это даёт на практике

📉 Меньше стрелочных функций ради передачи одного аргумента
🧩 Колбэки становятся короче и читаемее
🔎 Намерение кода видно сразу, без «обвязки»
🔗 Отлично сочетается с pipe-оператором
🧪 Упрощает функциональный стиль и композицию

🧱 Ключевая идея

Используются плейсхолдеры:

? — ровно один аргумент

— все оставшиеся аргументы

PHP не вызывает функцию, а возвращает преднастроенный callable.

⚙️ Где особенно полезно

array_map, array_filter, usort
• Преднастроенные валидаторы и фильтры
• HTTP-middleware и пайплайны
• Thunk-функции (отложенное выполнение)
• Конфигурация через именованные аргументы

🧩 Реальный сценарий


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

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

• Конструкторы нельзя частично применять
• Для new — только фабрики или статические методы
• Variadic-аргументы можно как «оставить открытыми», так и зафиксировать

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

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

Библиотека пхпшника
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔11👍83
💻 Первый дайджест новостей в этом году:​

🔹 Laravel 12.44 — в HTTP-клиенте появились колбэки afterResponse(), позволяющие обрабатывать ответ после его получения. Также добавлены ассерты заголовков для TestResponse, новые fluent-методы валидации дат и другие улучшения.

🔹 Laravel News: итоги 2025 — редакция подвела итоги года, отметив ключевые события экосистемы: релиз Laravel 12, запуск Laravel Cloud, крупные обновления инструментов и рост сообщества.

🔹 Symfony: итоги 2025 года — команда Symfony рассказала о главных достижениях проекта за год, поблагодарив сообщество за вклад в развитие фреймворка.

🔹 Symfony 29 декабря 2025 — 4 января 2026 — выпущены maintenance-версии Symfony 6.4.31, 7.3.9, 7.4.3 и 8.0.3, а также опубликован официальный годовой обзор Symfony за 2025 год.

🔹 Symfony UX 2.32.0 — представлен новый Toolkit Package с настраиваемыми UI-компонентами (на базе Shadcn UI): Button, Dialog, Card, Table, Pagination и другие.

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

#свежак
🌚1