Ищем человека в команду, который будет вести наши каналы по PHP. Нам нужен не душный сеньор-помидор, а тот, кто реально любит язык, следит за ним и может интересно рассказать об этом другим.
ЧТО ПО ЗАДАЧАМ?
Всё просто — ты ведёшь три канала (основной, задачи и собесы):
КОГО ИЩЕМ?
УСЛОВИЯ:
Харэ сачковать — заполняй анкету
Please open Telegram to view this post
VIEW IN TELEGRAM
🌊 Wave — стартер-пак для разработки SaaS-приложений
Библиотека написана на Laravel и включает все необходимое:
— аутентификация,
— профили пользователей,
— биллинг,
— подписка,
— роли и права доступа,
— уведомления и административная панель.
Инструмент упрощает создание SaaS-приложений, предоставляя необходимые базовые компоненты и гибкие возможности для дальнейшей настройки.
💻 GitHub
Библиотека пхпшника
#инструменты
Библиотека написана на Laravel и включает все необходимое:
— аутентификация,
— профили пользователей,
— биллинг,
— подписка,
— роли и права доступа,
— уведомления и административная панель.
Инструмент упрощает создание SaaS-приложений, предоставляя необходимые базовые компоненты и гибкие возможности для дальнейшей настройки.
💻 GitHub
Библиотека пхпшника
#инструменты
❤3
Что умеет Rector: пишем кастомные правила для автоматизации рефакторинга PHP-проектов
Если вам часто приходится сталкиваться с рефакторингом старых PHP-проектов, при этом их потребности выходят за пределы штатного набора правил, эта статья для вас.
🔗 Хабр
Библиотека пхпшника
Если вам часто приходится сталкиваться с рефакторингом старых PHP-проектов, при этом их потребности выходят за пределы штатного набора правил, эта статья для вас.
🔗 Хабр
Библиотека пхпшника
🤔1
🔧 CLI-лайфхак для PHP-разработчиков: Быстрое выполнение одноразовых команд с помощью опции -r 🚀
Полезная команда, которая позволяет выполнять небольшие фрагменты PHP-кода прямо из командной строки без создания отдельных файлов. Это особенно удобно для быстрого тестирования идей или выполнения одноразовых задач 🖥️
Как это сделать?
1. Откройте терминал на вашем компьютере.
2 Введите следующую команду, заменив код внутри одинарных кавычек на нужный вам PHP-код:
Почему это удобно?
🔸 Быстрота: нет необходимости создавать отдельный файл для выполнения небольшого фрагмента кода.
🔸 Удобство: идеальный способ для тестирования небольших функций или выражений.
🔸 Гибкость: позволяет комбинировать PHP с другими командными инструментами для автоматизации задач.
Обратите внимание:
Экранирование кавычек: при использовании одинарных кавычек внутри PHP-кода их необходимо экранировать обратным слэшем (\'), чтобы избежать конфликтов с внешними кавычками.
Библиотека пхпшника #буст
Полезная команда, которая позволяет выполнять небольшие фрагменты PHP-кода прямо из командной строки без создания отдельных файлов. Это особенно удобно для быстрого тестирования идей или выполнения одноразовых задач 🖥️
Как это сделать?
1. Откройте терминал на вашем компьютере.
2 Введите следующую команду, заменив код внутри одинарных кавычек на нужный вам PHP-код:
php -r 'echo «Привет, мир!\n»;'
Почему это удобно?
🔸 Быстрота: нет необходимости создавать отдельный файл для выполнения небольшого фрагмента кода.
🔸 Удобство: идеальный способ для тестирования небольших функций или выражений.
🔸 Гибкость: позволяет комбинировать PHP с другими командными инструментами для автоматизации задач.
Обратите внимание:
Экранирование кавычек: при использовании одинарных кавычек внутри PHP-кода их необходимо экранировать обратным слэшем (\'), чтобы избежать конфликтов с внешними кавычками.
php -r 'echo \'Это строка с одинарными кавычками.\' . «\n»;'
Библиотека пхпшника #буст
🥱7👍4🌚2
Добавь мозги в свой проект: курс по AI-агентам
PHP отлично справляется с вебом, но для AI-фич нужна правильная архитектура. Мы обновили курс «Разработка AI-агентов», чтобы вы могли внедрять умные функции в реальные проекты, а не просто играться с API.
Прагматичный подход:
🔹 Инжиниринг. Как управлять токенами, кэшем и не разориться на API.
🔹 Advanced RAG. Умный поиск по вашим базам данных и документам (даже если они «грязные»).
🔹 Legacy. Модуль по управлению старыми интерфейсами через браузер (актуально для автоматизации админок).
🔹 Стабильность. Трассировка ошибок, логирование и метрики качества.
Стартуй сейчас! Доступ к материалам сразу после покупки.
🎟 ПромокодAgent — скидка 10 000 ₽ (до 28 февраля).
👉 Прокачать проект AI-фичами
PHP отлично справляется с вебом, но для AI-фич нужна правильная архитектура. Мы обновили курс «Разработка AI-агентов», чтобы вы могли внедрять умные функции в реальные проекты, а не просто играться с API.
Прагматичный подход:
🔹 Инжиниринг. Как управлять токенами, кэшем и не разориться на API.
🔹 Advanced RAG. Умный поиск по вашим базам данных и документам (даже если они «грязные»).
🔹 Legacy. Модуль по управлению старыми интерфейсами через браузер (актуально для автоматизации админок).
🔹 Стабильность. Трассировка ошибок, логирование и метрики качества.
Стартуй сейчас! Доступ к материалам сразу после покупки.
🎟 Промокод
👉 Прокачать проект AI-фичами
И снова горячие клавиши. Вот подборка для работы с кодом:
🔹 Alt + Enter: универсальный контекстный помощник, отображающий доступные действия в зависимости от положения курсора.
🔹 Ctrl + P: показать подсказку по параметрам метода или функции.
🔹 Ctrl + Shift + I: быстрый просмотр реализации метода или функции.
Библиотека пхпшника #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱2❤1
💻 Переворачиваем биты 32-битного числа в PHP
Bitwise-операции 🔢— это основа низкоуровневого программирования, криптографии и дебага. Одна из распространённых задач — инверсия битов 32-битного беззнакового числа: заменяем все 0 на 1 и наоборот.
📌 Что такое 32-битное беззнаковое число?
Оно хранит значения от 0 до 4294967295 (2³² — 1). В отличие от знаковых чисел, здесь нет отрицательных значений.
🔹 Как инвертировать биты в PHP?
PHP поддерживает побитовые операции с операторами ~ (NOT) и ^ (XOR).
❌ ~ меняет все биты, но из-за особенностей PHP приводит к отрицательным значениям.
✅ ^ (XOR) с 0xFFFFFFFF даёт правильный результат.
🔍 Примеры работы кода
✅ Вход: 0
🔹 Бинарный вид: 00000000000000000000000000000000
🔹 Инверсия: 11111111111111111111111111111111
🔹 Десятичный результат: 4294967295
✅ Вход: 2147483647
🔹 Бинарный вид: 01111111111111111111111111111111
🔹 Инверсия: 10000000000000000000000000000000
🔹 Десятичный результат: 2147483648
Библиотека пхпшника
Bitwise-операции 🔢— это основа низкоуровневого программирования, криптографии и дебага. Одна из распространённых задач — инверсия битов 32-битного беззнакового числа: заменяем все 0 на 1 и наоборот.
📌 Что такое 32-битное беззнаковое число?
Оно хранит значения от 0 до 4294967295 (2³² — 1). В отличие от знаковых чисел, здесь нет отрицательных значений.
🔹 Как инвертировать биты в PHP?
PHP поддерживает побитовые операции с операторами ~ (NOT) и ^ (XOR).
❌ ~ меняет все биты, но из-за особенностей PHP приводит к отрицательным значениям.
✅ ^ (XOR) с 0xFFFFFFFF даёт правильный результат.
🔍 Примеры работы кода
✅ Вход: 0
🔹 Бинарный вид: 00000000000000000000000000000000
🔹 Инверсия: 11111111111111111111111111111111
🔹 Десятичный результат: 4294967295
✅ Вход: 2147483647
🔹 Бинарный вид: 01111111111111111111111111111111
🔹 Инверсия: 10000000000000000000000000000000
🔹 Десятичный результат: 2147483648
Библиотека пхпшника
👍3🌚2
🕑 Метод «times»
Знаете ли вы, что в Laravel есть классный метод коллекций
Библиотека пхпшника
#vardump
Знаете ли вы, что в Laravel есть классный метод коллекций
times, который позволяет создавать коллекцию, вызывая замыкание N раз? Это может быть полезно при работе с днями или генерации случайных строк🚀Библиотека пхпшника
#vardump
Заказчик просит «прикрутить ИИ», а API сжирает весь бюджет?
Знакомая история: вы интегрируете LLM в CRM или интернет-магазин, а агент начинает галлюцинировать, не справляется с кривыми PDF-ками и шлёт слишком дорогие запросы к API.
Мы полностью переработали курс по AI-агентам под стандарты 2026 года. Теперь мы учим не просто делать запросы к нейросетям, а строить полноценные, отказоустойчивые системы с жёстким контролем качества и затрат.
В программе обновлённого курса:
— продвинутый RAG: учим систему нормально читать сканы, сложные таблицы и разнородные документы;
— надёжные пайплайны: контрольные точки, перемотка времени и откат при ошибках (time-travel);
— экономика: кэширование, лимиты на действия и переключение на экономные модели под капотом;
— парсинг нового уровня: учим агентов управлять браузером и кликать по старым интерфейсам;
— юридическая база: как собирать и хранить данные с ИИ, чтобы не нарушить 152-ФЗ.
Ловите скидку 10 000 рублей по промокоду
Участвуйте в акции «3 курса по цене 1» и получайте два курса в подарок.
Вывести ИИ-интеграции на новый уровень
Знакомая история: вы интегрируете LLM в CRM или интернет-магазин, а агент начинает галлюцинировать, не справляется с кривыми PDF-ками и шлёт слишком дорогие запросы к API.
Мы полностью переработали курс по AI-агентам под стандарты 2026 года. Теперь мы учим не просто делать запросы к нейросетям, а строить полноценные, отказоустойчивые системы с жёстким контролем качества и затрат.
В программе обновлённого курса:
— продвинутый RAG: учим систему нормально читать сканы, сложные таблицы и разнородные документы;
— надёжные пайплайны: контрольные точки, перемотка времени и откат при ошибках (time-travel);
— экономика: кэширование, лимиты на действия и переключение на экономные модели под капотом;
— парсинг нового уровня: учим агентов управлять браузером и кликать по старым интерфейсам;
— юридическая база: как собирать и хранить данные с ИИ, чтобы не нарушить 152-ФЗ.
Ловите скидку 10 000 рублей по промокоду
Agent (до 28 февраля).Участвуйте в акции «3 курса по цене 1» и получайте два курса в подарок.
Вывести ИИ-интеграции на новый уровень
❓ PDO или ORM?
PDO — для тех, кто ценит полный контроль. Пишете SQL вручную, понимаете, что происходит под капотом. Гибкость максимальна, но код засоряется повторениями, а сложные запросы становятся испытанием при развитии проекта.
ORM (Eloquent, Doctrine) — путь удобства. Работаете с объектами вместо SQL, код становится чище, а разработка быстрее. Но магия абстракции может привести к неожиданным SQL-запросам, проблемам с производительностью и сложной отладке.
💬 Вы за прозрачность и контроль или удобство и скорость разработки? Какой путь выбираете вы?
Библиотека пхпшника (https://t.me/phpproglib) #междусобойчик
PDO — для тех, кто ценит полный контроль. Пишете SQL вручную, понимаете, что происходит под капотом. Гибкость максимальна, но код засоряется повторениями, а сложные запросы становятся испытанием при развитии проекта.
ORM (Eloquent, Doctrine) — путь удобства. Работаете с объектами вместо SQL, код становится чище, а разработка быстрее. Но магия абстракции может привести к неожиданным SQL-запросам, проблемам с производительностью и сложной отладке.
💬 Вы за прозрачность и контроль или удобство и скорость разработки? Какой путь выбираете вы?
Библиотека пхпшника (https://t.me/phpproglib) #междусобойчик
🥱6
🐘 Оживляем веб-сервисы: разработка автономных AI-агентов на промышленном уровне
В 2026 году AI-агенты — это не только чаты, но и автоматизация браузеров, работа с
📚 В программе курса:
— управление браузером: новый модуль по автоматизации действий и визуальным подтверждениям;
—
— экономика процесса: считаем токены, управляем кэшем и снижаем затраты на
— закон и порядок: как развернуть AI-решение, не нарушая
Доступ к вводным лекциям вы получите сразу — начинайте подготовку уже сегодня.
⏳ Специальные условия до 28 февраля:
— введите промокод
— участвуйте в **акции «3 курса по цене 1» — два дополнительных курса в подарок.
👉 Получить доступ к курсу и подаркам
В 2026 году AI-агенты — это не только чаты, но и автоматизация браузеров, работа с
legacy-интерфейсами и умный поиск по документам. Мы обновили курс, чтобы вы могли строить полноценные системы, а не просто дёргать API.📚 В программе курса:
— управление браузером: новый модуль по автоматизации действий и визуальным подтверждениям;
—
RAG высокого уровня: как заставить агента искать информацию в таблицах и сканах;— экономика процесса: считаем токены, управляем кэшем и снижаем затраты на
LLM;— закон и порядок: как развернуть AI-решение, не нарушая
152-ФЗ.Доступ к вводным лекциям вы получите сразу — начинайте подготовку уже сегодня.
⏳ Специальные условия до 28 февраля:
— введите промокод
Agent для получения скидки 10 000 рублей**; — участвуйте в **акции «3 курса по цене 1» — два дополнительных курса в подарок.
👉 Получить доступ к курсу и подаркам
⌛️ Как настроить production-ready логирование в PHP
Логи в проде — это не просто error_log(). Это структурированные данные, correlation ID, асинхронная запись и ротация. Разбираем пошаговую настройку.
1️⃣ Выбираем стек: Monolog
PHP де-факто стандарт для логирования — Monolog. Устанавливаем через Composer:
Если на Laravel, уже есть из коробки. Если нет, то подключаем вручную.
2️⃣ Базовая конфигурация с JSON-форматом
JSON-формат удобен для парсинга в ELK / Grafana Loki.
3️⃣ Добавляем Correlation ID
Трекаем каждый запрос через Processor:
Теперь каждая строка лога привязана к конкретному запросу.
4️⃣ Ротация и лимиты
Для ограничения по размеру связываем с logrotate на уровне системы:
5️⃣ Асинхронная запись
PHP синхронный по природе, но можно буферизовать тяжёлые хендлеры:
Буферизуем записи и сбрасываем пачкой → меньше I/O операций.
6️⃣ Интеграция с мониторингом
Отправляем в Graylog через GELF:
Или напрямую в Telegram для критических ошибок. Отдельный хендлер, 5 минут работы.
📌 Итог
Monolog + JsonFormatter + CorrelationId + logrotate = логи, с которыми не стыдно идти в прод.
Библиотека пхпшника
Логи в проде — это не просто error_log(). Это структурированные данные, correlation ID, асинхронная запись и ротация. Разбираем пошаговую настройку.
PHP де-факто стандарт для логирования — Monolog. Устанавливаем через Composer:
composer require monolog/monolog
Если на Laravel, уже есть из коробки. Если нет, то подключаем вручную.
use Monolog\Logger;
use Monolog\Handler\RotatingFileHandler;
use Monolog\Formatter\JsonFormatter;
$log = new Logger('app');
$handler = new RotatingFileHandler(
__DIR__ . '/logs/application.log',
maxFiles: 30,
level: Logger::INFO
);
$handler->setFormatter(new JsonFormatter());
$log->pushHandler($handler);
JSON-формат удобен для парсинга в ELK / Grafana Loki.
Трекаем каждый запрос через Processor:
class CorrelationIdProcessor implements ProcessorInterface
{
private string $correlationId;
public function __construct()
{
$this->correlationId = $_SERVER['HTTP_X_CORRELATION_ID']
?? bin2hex(random_bytes(16));
header('X-Correlation-ID: ' . $this->correlationId);
}
public function __invoke(array $record): array
{
$record['extra']['correlation_id'] = $this->correlationId;
return $record;
}
}
$log->pushProcessor(new CorrelationIdProcessor());
Теперь каждая строка лога привязана к конкретному запросу.
$handler = new RotatingFileHandler(
filename: __DIR__ . '/logs/app.log',
maxFiles: 30,
level: Logger::WARNING,
);
Для ограничения по размеру связываем с logrotate на уровне системы:
# /etc/logrotate.d/php-app
/var/www/app/logs/*.log {
daily
rotate 30
compress
missingok
size 100M
}
PHP синхронный по природе, но можно буферизовать тяжёлые хендлеры:
use Monolog\Handler\BufferHandler;
$bufferHandler = new BufferHandler(
handler: new StreamHandler('logs/app.log'),
bufferSize: 100,
flushOnOverflow: true
);
$log->pushHandler($bufferHandler);
Буферизуем записи и сбрасываем пачкой → меньше I/O операций.
Отправляем в Graylog через GELF:
use Monolog\Handler\GelfHandler;
use Gelf\Publisher;
use Gelf\Transport\UdpTransport;
$publisher = new Publisher(
new UdpTransport('logstash.example.com', 12201)
);
$log->pushHandler(new GelfHandler($publisher));
Или напрямую в Telegram для критических ошибок. Отдельный хендлер, 5 минут работы.
Monolog + JsonFormatter + CorrelationId + logrotate = логи, с которыми не стыдно идти в прод.
Библиотека пхпшника
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥2❤1
⌨️ Топ-вакансий по PHP за неделю
PHP-разработчик — от 150 000 до 200 000 ₽ — удалёнка, гибрид (Москва)
PHP Developer FinTech — от 200 000 ₽ — гибрид (Санкт-Петербург)
Backend разработчик — от 480 000 ₽ — удалёнка
➡️ Еще больше топовых вакансий — в нашем канале PHP Jobs
PHP-разработчик — от 150 000 до 200 000 ₽ — удалёнка, гибрид (Москва)
PHP Developer FinTech — от 200 000 ₽ — гибрид (Санкт-Петербург)
Backend разработчик — от 480 000 ₽ — удалёнка
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1🔥1
За год мы провели три потока курса по ИИ-агентам, а теперь запускаем масштабное обновление!
В новом, четвёртом потоке мы учли все пожелания студентов, добавили большой блок про
В программе:
— интеграция агентов с инструментами и базами данных по протоколу
— оркестрация в
— продвинутый
— контроль экономики агентов: маршрутизация и кеширование запросов;
— развёртывание локальных опенсорс-моделей с соблюдением 152-ФЗ.
В честь старта продаж действует спецпредложение: 3 курса по цене 1 (два дополнительных курса в подарок).
Доступ к материалам для предварительной подготовки откроется сразу после оплаты.
По промокоду
👉 Присоединиться к четвёртому потоку и вывести агентов в прод
В новом, четвёртом потоке мы учли все пожелания студентов, добавили большой блок про
AgentOps и сместили фокус с базовых концепций на суровый инжиниринг. Интегрировать LLM в веб-проект по API легко, а вот сделать так, чтобы бэкенд не отваливался от галлюцинаций нейросети, а агент не сливал бюджет — задача со звёздочкой.В программе:
— интеграция агентов с инструментами и базами данных по протоколу
MCP;— оркестрация в
LangGraph: механизм time-travel и обработка ошибок;— продвинутый
RAG для продакшена и парсинг сложных документов;— контроль экономики агентов: маршрутизация и кеширование запросов;
— развёртывание локальных опенсорс-моделей с соблюдением 152-ФЗ.
В честь старта продаж действует спецпредложение: 3 курса по цене 1 (два дополнительных курса в подарок).
Доступ к материалам для предварительной подготовки откроется сразу после оплаты.
По промокоду
Agent забирайте скидку 10 000 ₽ (89 000 ₽ вместо 99 000 ₽). Успейте занять место до 28 февраля!👉 Присоединиться к четвёртому потоку и вывести агентов в прод
🥱2
🔧 Фишка PHP
array_walk_recursive + замыкание — обходим вложенные массивы без рекурсии вручную.
Часто видишь код, где разработчик пишет свою рекурсивную функцию для обхода многомерного массива. Но PHP уже давно умеет это из коробки.
Почему это удобно:
— Не нужно писать свой рекурсивный обход
— Работает с любой глубиной вложенности
— Передача по ссылке (&$value) позволяет менять данные на месте
Где применяется на практике:
— Санитизация входящих данных из форм / API
— Нормализация конфигов
— Очистка данных перед валидацией
💡 Помни: array_walk_recursive пропускает ключи-массивы и заходит внутрь — то есть колбэк вызывается только для скалярных значений. Это поведение стоит учитывать, если тебе нужно обрабатывать и промежуточные узлы.
Библиотека пхпшника
array_walk_recursive + замыкание — обходим вложенные массивы без рекурсии вручную.
Часто видишь код, где разработчик пишет свою рекурсивную функцию для обхода многомерного массива. Но PHP уже давно умеет это из коробки.
$data = [
'name' => ' John ',
'address' => [
'city' => ' Berlin ',
'zip' => ' 10115 ',
],
];
array_walk_recursive($data, function (&$value) {
if (is_string($value)) {
$value = trim($value);
}
});
// Все строки на любом уровне вложенности — обрезаны
Почему это удобно:
— Не нужно писать свой рекурсивный обход
— Работает с любой глубиной вложенности
— Передача по ссылке (&$value) позволяет менять данные на месте
Где применяется на практике:
— Санитизация входящих данных из форм / API
— Нормализация конфигов
— Очистка данных перед валидацией
Библиотека пхпшника
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤2🔥1
🐘 PHP для начинающих (и напоминание для опытных)
🔹 Область видимости переменных (Variable Scope)
Одна из вещей, которая поначалу ставит в тупик.
В PHP у каждой функции своя область видимости. Она не видит глобальные переменные в отличие от многих других языков.
🔹 Как получить доступ к глобальной переменной
Через ключевое слово global:
Или через суперглобальный массив $GLOBALS:
🔹 Статические переменные
Если нужно, чтобы переменная «помнила» своё значение между вызовами функции, используй static:
Без static каждый раз было бы 1.
🔹 Что важно помнить
→ Глобальные переменные внутри функций — не лучшая практика. Лучше передавать данные через аргументы.
→ static — удобно для счётчиков, кешей внутри функции, рекурсии.
→ В замыканиях (Closure) переменные захватываются через use:
Библиотека пхпшника
#php_азбука
🔹 Область видимости переменных (Variable Scope)
Одна из вещей, которая поначалу ставит в тупик.
Почему переменная есть снаружи, но не видна внутри функции?
$name = 'Alice';
function greet() {
echo $name; // ⚠️ Undefined variable!
}
В PHP у каждой функции своя область видимости. Она не видит глобальные переменные в отличие от многих других языков.
🔹 Как получить доступ к глобальной переменной
Через ключевое слово global:
php
$name = 'Alice';
function greet() {
global $name;
echo $name; // Alice ✅
}
Или через суперглобальный массив $GLOBALS:
php
function greet() {
echo $GLOBALS['name']; // Alice ✅
}
🔹 Статические переменные
Если нужно, чтобы переменная «помнила» своё значение между вызовами функции, используй static:
function counter() {
static $count = 0;
$count++;
echo $count;
}
counter(); // 1
counter(); // 2
counter(); // 3Без static каждый раз было бы 1.
🔹 Что важно помнить
→ Глобальные переменные внутри функций — не лучшая практика. Лучше передавать данные через аргументы.
→ static — удобно для счётчиков, кешей внутри функции, рекурсии.
→ В замыканиях (Closure) переменные захватываются через use:
$name = 'Alice';
$greet = function() use ($name) {
echo $name; // Alice ✅
};
Библиотека пхпшника
#php_азбука
🥱10👍6🔥2😢1
Не все знают, что array_filter() без второго аргумента убирает все «пустые» значения автоматически:
php
$data = [0, '', null, false, 'hello', 42, [], 'world'];
$result = array_filter($data);
// ['hello', 42, 'world']
Удалит: 0, '', null, false, []
Оставит: всё, что приводится к true
Используй это для очистки данных формы или фильтрации результатов из БД перед обработкой.
Библиотека пхпшника
#vardump
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥1