Пока нет отзывов. Будьте первым, кто поделится своим опытом!
Последние посты
Библиотека PHP программиста 👨🏼💻👩💻
17 мая 2026 г., 14:19
📷 Photo
https://otus.ru/lessons/symfony/?utm_source=telegram&utm_medium=cpm&utm_campaign=symfony&utm_term=php_lib&utm_content=mql_lesson-22-04-2026_usp-universal_symfony_text_no-headline_aida_short_banner_lesson-banner_white_standart&erid=2Vtzqxkkuu1#event-7033
Во многих приложениях бизнес-логика держится на статусах: заказ создан, оплачен, отправлен, доставлен. Пока таких состояний мало, всё кажется простым. Но как только процесс растёт, цепочки if/else начинают расползаться по проекту, логика дублируется, а добавление нового статуса превращается в риск для всей системы.
📅 На открытом уроке 22 апреля:
— Разберём, как использовать Symfony Workflow для формализации бизнес-процессов через конечный автомат.
— Покажем, чем конечный автомат отличается от рабочего процесса, когда применять каждый подход, как описывать состояния и переходы в YAML и как Symfony умеет автоматически визуализировать процесс.
— На практическом примере рассмотрим сущность заказа со статусами new → paid → shipped → delivered, методы can() и apply(), а также построение схемы состояний через workflow:dump.
Урок не для тех, кто считает, что строковое поле status и набор if/else — это нормальная архитектура «на вырост», и не для тех, кто не работает со сложной бизнес-логикой в приложении.
👉 Записаться: https://vk.cc/cWIYAd
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, http://www.otus.ru/
410
1
0
Библиотека PHP программиста 👨🏼💻👩💻
17 мая 2026 г., 14:19
Оптимизация SQL-запросов в PHP: избавляемся от тормозов! 🚀
Сегодня я покажу вам, как улучшить производительность SQL-запросов в PHP и избавиться от лишней нагрузки на базу данных.
1. Используйте подготовленные запросы
Не только защита от SQL-инъекций, но и кеширование запросов внутри СУБД!
Пример с PDO:
$stmt = $pdo->prepare("SELECT * FROM users WHERE email = :email");
$stmt->execute(['email' => $email]);
$user = $stmt->fetch();
2. Выбирайте только нужные данные
Зачем вам SELECT *, если нужно только id и name? Выбирайте только нужные колонки!
$stmt = $pdo->query("SELECT id, name FROM users");
3. Индексы – ваши друзья
Проверяйте, есть ли индексы на полях, которые часто используются в WHERE и JOIN. Без индексов база будет делать полный перебор строк!
CREATE INDEX idx_email ON users(email);
4. Избегайте N+1 запроса
Вместо 100 мелких запросов – один с JOIN.
❌ Плохо (100 запросов в цикле!):
foreach ($users as $user) {
$stmt = $pdo->prepare("SELECT * FROM orders WHERE user_id = ?");
$stmt->execute([$user['id']]);
$orders[$user['id']] = $stmt->fetchAll();
}
✅ Хорошо (один запрос):
$query = "SELECT users.id, users.name, orders.id as order_id
FROM users
LEFT JOIN orders ON users.id = orders.user_id";
$stmt = $pdo->query($query);
$result = $stmt->fetchAll();
5. Используйте кеширование
Храните частые запросы в Redis или Memcached, чтобы снизить нагрузку на базу.
$cacheKey = "users_list";
$users = $redis->get($cacheKey);
if (!$users) {
$users = $pdo->query("SELECT id, name FROM users")->fetchAll();
$redis->setex($cacheKey, 3600, json_encode($users));
}
Эти советы помогут вам ускорить ваш PHP-код, снизить нагрузку на базу данных и сделать сайт более отзывчивым.
📲 https://max.ru/php_lib
👉
Библиотека PHP программиста 👨🏼💻👩💻
17 мая 2026 г., 14:19
🔥 Как избежать проблем с isset() и empty() в PHP?
Сегодня разберём две часто используемые функции в PHP — isset() и empty(), которые могут вести себя не так, как вы ожидаете.
📌 isset()
Функция isset($var) проверяет, была ли переменная установлена и не равна ли она null.
❗ Пример подвоха:
$var = null;
var_dump(isset($var)); // false
Если переменной вообще нет в коде — тоже будет false.
📌 empty()
Функция empty($var) проверяет, считается ли переменная "пустой".
❗ Пустыми считаются:
- "" (пустая строка)
- 0 (число)
- "0" (строка с нулём)
- null
- false
- [] (пустой массив)
Пример:
$var = "0";
var_dump(empty($var)); // true, хотя строка не null
⚠️ Ошибка: проверка if (!isset($var) || empty($var)) может привести к неожиданному результату.
🔥 Лучший подход?
Используйте строгие проверки:
if ($var === null) { /* Переменная null */ }
if ($var === '') { /* Пустая строка */ }
if ($var === 0) { /* Число 0 */ }
Если проверяете массивы, то:
if (count($var) === 0) { /* Массив пуст */ }
Вывод: не злоупотребляйте isset() и empty(), а проверяйте переменные строго!
📲 https://max.ru/php_lib
👉
476
4
Библиотека PHP программиста 👨🏼💻👩💻
17 мая 2026 г., 14:19
📷 Photo
https://otus.ru/lessons/symfony/?utm_source=telegram&utm_medium=cpm&utm_campaign=symfony&utm_term=php_lib&utm_content=mql_lesson-15-04-2026_usp-universal_symfony_text_no-headline_aida_short_banner_lesson-banner_white_standart&erid=2Vtzqx9GMpr#event-7032
Перевести интерфейс через файлы — это только начало. Настоящие сложности начинаются тогда, когда переводить нужно не статичные строки, а содержимое из базы данных, которое живёт в административной панели, меняется редакторами и должно оставаться управляемым с точки зрения архитектуры.
📅 На открытом уроке 15 апреля в 20:00:
— Разберём реальный сценарий локализации в Symfony — от стандартного подхода со статическими переводами до более сложной работы с динамическими текстами из базы данных.
— Покажем возможности компонента symfony/translation, разберём подходы к хранению переводов, варианты моделей данных и практическую реализацию получения локализованного содержимого через Doctrine.
Урок не для тех, кто хочет решить многоязычность «одной таблицей на всё», не думает о поддержке архитектуры и считает, что локализация заканчивается на переводе кнопок и заголовков.
👉 Записаться: https://vk.cc/cWoJXu
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, http://www.otus.ru/
Библиотека PHP программиста 👨🏼💻👩💻
17 мая 2026 г., 14:19
Оптимизация скорости работы PHP кода 🏎️
Сегодня я покажу вам несколько простых, но эффективных способов ускорить выполнение PHP-скриптов. Оптимизация кода – важная часть работы разработчика, ведь никто не любит медленные сайты. 🚀
🔥 1. Избегайте лишних запросов к БД
Частая ошибка – несколько одинаковых запросов к базе данных в одном запросе. Используйте кэширование (Redis, Memcached), а если данные редко меняются – сохраняйте их в файл.
🔥 2. Используйте isset() вместо array_key_exists()
Функция isset() работает быстрее, чем array_key_exists(), потому что она не только проверяет наличие ключа, но и сразу его значение.
// Медленный вариант
if (array_key_exists('key', $array)) { }
// Быстрый вариант
if (isset($array['key'])) { }
🔥 3. Не злоупотребляйте foreach при больших объемах данных
Если у вас массив с десятками тысяч элементов, попробуйте array_map() или array_walk() – они работают быстрее за счет встроенной оптимизации в C.
🔥 4. Подключайте файлы правильно
Разница между require, include, require_once и include_once может сильно повлиять на производительность. require_once проверяет, был ли уже подключен файл, что замедляет выполнение. Если точно знаете, что файл не дублируется – используйте require.
🔥 5. Включите OPCache
OPCache кэширует байт-код PHP и ускоряет его выполнение в разы. Включите его в php.ini:
opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=10000
opcache.validate_timestamps=1
🔥 6. Используйте json_encode() вместо serialize()
Функция json_encode() работает быстрее, чем serialize(), и при этом генерирует более компактные данные.
$data = ['name' => 'John', 'age' => 25];
// Медленный вариант
$serialized = serialize($data);
// Быстрый вариант
$json = json_encode($data);
✅ Оптимизация PHP кода — это не магия, а грамотный подход к написанию скриптов. Используйте эти советы, и ваши проекты станут быстрее!
📲 https://max.ru/php_lib
👉
Библиотека PHP программиста 👨🏼💻👩💻
17 мая 2026 г., 14:19
🎥 Video
Совет по Laravel 💡
Один из моих любимых недокументированных советов, который я регулярно использую. Используйте "wasRecentlyCreated", чтобы проверить, была ли модель создана или найдена в базе данных.
📲 https://max.ru/php_lib
👉
816
3
Библиотека PHP программиста 👨🏼💻👩💻
17 мая 2026 г., 14:19
📷 Photo
🔥 Совет по Laravel: wherePivot.
В отношениях "многие-ко-многим" можно добавить операторы where в таблицу pivot, используя метод `wherePivot`.
📲 https://max.ru/php_lib
👉
714
4
Библиотека PHP программиста 👨🏼💻👩💻
17 мая 2026 г., 14:19
📷 Photo
Совет по Laravel 💡
Знаете ли вы, что... вы можете временно отключить timestamps при сохранении модели?
📲 https://max.ru/php_lib
👉
585
4
Библиотека PHP программиста 👨🏼💻👩💻
17 мая 2026 г., 14:19
🚀 Подборка полезных IT каналов в Max
Системное администрирование, DevOps 📌
https://max.ru/i_odmin Все для системного администратора
https://max.ru/bash_srv Bash Советы
https://max.ru/sysadminof Книги для админов, полезные материалы
https://max.ru/i_odmin_book Библиотека Системного Администратора
https://max.ru/i_devops DevOps: Пишем о Docker, Kubernetes и др.
1C разработка 📌
https://max.ru/odin1c_rus Cтатьи, курсы, советы, шаблоны кода 1С
Программирование C++📌
https://max.ru/cpp_lib Библиотека C/C++ разработчика
Программирование Python 📌
https://max.ru/python_of Python академия.
https://max.ru/BookPython Библиотека Python разработчика
Java разработка 📌
https://max.ru/bookjava Библиотека Java разработчика
GitHub Сообщество 📌
https://max.ru/githublib Интересное из GitHub
Базы данных (Data Base) 📌
https://max.ru/database_info Все про базы данных
Фронтенд разработка 📌
https://max.ru/frontend_1 Подборки для frontend разработчиков
Библиотеки 📌
https://max.ru/programmist_of Книги по программированию
https://max.ru/proglb Библиотека программиста
https://max.ru/bfbook Книги для программистов
Программирование 📌
https://max.ru/bookflow Лекции, видеоуроки, доклады с IT конференций
https://max.ru/itmozg Программисты, дизайнеры, новости из мира IT
https://max.ru/php_lib Библиотека PHP программиста 👨🏼💻👩💻
Шутки программистов 📌
https://max.ru/itumor Шутки программистов
Защита, взлом, безопасность 📌
https://max.ru/thehaking Канал о кибербезопасности
https://max.ru/xakkep_1 Хакер Free
Книги, статьи для дизайнеров 📌
https://max.ru/odesigners Статьи, книги для дизайнеров
Математика 📌
https://max.ru/Pomatematike Канал по математике
https://max.ru/phismat_1 Обучающие видео, книги по Физике и Математике
Вакансии 📌
https://max.ru/progjob Вакансии в IT
Мир технологий 📌
https://max.ru/mir_teh Канал для любознательных
Бонус 📌
https://max.ru/piterspb_78 Свежие новости Санкт-Петербурга
https://max.ru/mockva_life Свежие новости Москвы
Библиотека PHP программиста 👨🏼💻👩💻
17 мая 2026 г., 14:19
📷 Photo
Совет по PHP/Laravel 💡
Вместо того чтобы выполнять цикл `foreach` по массиву для поиска значения записи, вы можете использовать метод Laravel Collection `contains()`.
📲 https://max.ru/php_lib
👉
808
4
Библиотека PHP программиста 👨🏼💻👩💻
28 мар. 2026 г., 02:15
🎥 Video
💡Советы и хитрости PhpStorm - Store Window Layout
Вам не нравится адаптировать положение окон инструментов при каждом новом проекте? (например, дерево файлов слева направо).
Вы можете сохранить их.
📲 https://max.ru/php_lib
👉
799
2
Библиотека PHP программиста 👨🏼💻👩💻
28 мар. 2026 г., 02:15
📷 Photo
🚨 Совет по безопасности Livewire: Всегда выполняйте авторизацию своих действий! 🔒
Никогда не доверяйте пользовательскому вводу — всегда проверяйте права доступа перед выполнением важных операций. Если вы уже используете Gates и Policies, работа с Livewire покажется вам привычной! 🏡💪
#Laravel #Livewire
📲 https://max.ru/php_lib
👉
753
1
Библиотека PHP программиста 👨🏼💻👩💻
28 мар. 2026 г., 02:15
📷 Photo
Совет по Laravel 💡
Легко обновляйте столбцы JSON с помощью синтаксиса стрелок Laravel! Используйте -> для указания конкретных ключей в ваших JSON-данных. Работает с MariaDB 10.3+, MySQL 5.7+ и PostgreSQL 9.5+.
📲 https://max.ru/php_lib
👉
896
5
Библиотека PHP программиста 👨🏼💻👩💻
28 мар. 2026 г., 02:15
📷 Photo
Админ vs студент: разбор тестового задания — сервис консультаций на Laravel за неделю
Эта статья — подробный разбор тестового задания на позицию PHP-разработчика, которое мне пришлось выполнить в краткие сроки из-за приближающей сессии. Я расскажу, с какими трудностями столкнулся, будучи студентом и новичком в веб-разработке, как построил архитектуру проекта «Школьные консультации» и что из этого вышло. Если вам интересен взгляд «с первоначального этапа» на классическую задачу или вы хотите узнать, чем всё кончилось, или у вас был похожий опыт (о котором вы хотели рассказать), то добро пожаловать.
https://habr.com/ru/companies/ruvds/articles/983692/
📲 https://max.ru/php_lib
👉
984
Библиотека PHP программиста 👨🏼💻👩💻
28 мар. 2026 г., 02:15
Анемичная модель vs Богатая модель
Ваши сущности, это просто "мешки для данных"?
Типичная ошибка (Anemic Domain Model):
У вас есть Entity Order, в которой только геттеры и сеттеры. А вся логика лежит в гигантском OrderService на 2000 строк.
❌ Как это выглядит (Анемия):
// Service
$order->setStatus('paid');
$order->setUpdatedAt(new DateTime());
// А вдруг забыли отправить ивент?
// А можно ли менять статус на 'paid', если сумма 0?
// Сервис должен всё помнить.
$repo->save($order);
✅ Как должно быть (Rich Model):
Переносим бизнес-логику внутрь сущности. Принцип "Tell, Don't Ask" (Говори, а не спрашивай).
class Order
{
// Свойства приватны! Извне их менять нельзя.
private string $status;
private array $items = [];
public function pay(Payment $payment): void
{
if ($this->status === 'paid') {
throw new DomainException("Order already paid");
}
if ($payment->amount < $this->getTotal()) {
throw new DomainException("Not enough money");
}
$this->status = 'paid';
$this->recordEvent(new OrderPaid($this->id));
}
}
// Service становится тонким и скучным (и это хорошо!):
$order->pay($payment);
$repo->save($order);
Суть: Сущность сама следит за своими инвариантами (правилами). Вы физически не можете перевести её в некорректное состояние. Сервисы просто дирижируют процессом, но не знают деталей бизнес-правил.
Где сейчас живет ваша логика? В сервисах или в моделях?
#ddd #architecture #oop #refactoring
📲 https://max.ru/php_lib
👉
792
Библиотека PHP программиста 👨🏼💻👩💻
28 мар. 2026 г., 02:15
📷 Photo
Совет по Laravel 💡: Метод «diffInDaysFiltered»
Вам когда-нибудь требовалось подсчитать количество дней между двумя датами при фильтрации по условию? Поскольку Laravel использует Carbon под капотом, вы можете использовать «diffInDaysFiltered», чтобы сделать именно это 🚀.
#laravel
📲 https://max.ru/php_lib
👉
980
4
Библиотека PHP программиста 👨🏼💻👩💻
28 мар. 2026 г., 02:15
Value Objects (Объекты-значения) - самый быстрый выигрыш
Хватит страдать от «Primitive Obsession»!
В большинстве легаси-проектов я вижу такое:
function register(string $email, string $phone, float $amount)
Что тут не так?
1. string $email - это просто набор байт. Там может быть "asdf", и PHP это проглотит.
2. Валидация размазана по контроллерам и сервисам.
3. Логика (например, форматирование телефона) дублируется.
✅ Внедряем Value Object:
readonly class Email
{
public string $value;
public function __construct(string $value)
{
if (!filter_var($value, FILTER_VALIDATE_EMAIL)) {
throw new InvalidArgumentException("Invalid email format");
}
$this->value = strtolower($value); // Нормализация
}
public function getDomain(): string
{
return explode('@', $this->value)[1];
}
}
// Теперь сигнатура метода говорит правду:
function register(Email $email, Phone $phone, Money $amount) { ... }
В чем профит:
💜Гарантия: Если у тебя в руках объект Email, он 100% валиден. Не надо проверять это снова.
💜Инкапсуляция: Логика живет внутри класса, а не в Helper::formatPhone().
💜Immutability: Value Object нельзя изменить, можно только создать новый. Это спасает от сайд-эффектов.
Совет: Начните внедрение DDD именно с Value Objects (Деньги, Координаты, Email, SKU). Это дешево и сразу чистит код.
Напишите в комментах, для чего вы уже используете VO? 👇
#ddd #valueobjects #refactoring #php82
📲 https://max.ru/php_lib
👉
636
Библиотека PHP программиста 👨🏼💻👩💻
28 мар. 2026 г., 02:15
Когда DDD вам НЕ нужен (и когда нужен)
DDD - это не про структуру папок. Это про борьбу со сложностью.
Самая большая ловушка: прочитав Эванса или Вернона, начать пихать DDD в простой CRUD. Если ваше приложение просто перекладывает JSON из запроса в базу, DDD сделает разработку в 3 раза дороже и медленнее.
🚦 Когда DDD избыточен:
💜Админки, простые CMS.
💜Микросервисы-прокси.
💜Прототипы (MVP), которые нужно выкинуть через месяц.
🔥 Когда DDD необходим:
💜Сложный бизнес-процесс: (например, расчет налога с учетом льгот, региона и фазы луны).
💜Долгоживущий проект: (вы будете поддерживать это 3+ года).
💜Важность языка: Когда менеджер говорит «списать бонус», а в коде это $user->points -= 10. Это рассинхрон, который приведет к багам. В DDD это будет $user->debitBonuses(10).
Главный принцип:
DDD применяется не ко всему проекту целиком, а к Core Domain (Ядру). Вспомогательные модули (отправка почты, логи) могут и должны оставаться простыми.
Вывод: Не стройте "Звезду Смерти" для доставки пиццы. Сложность архитектуры должна соответствовать сложности бизнеса.
Ставь ❤️, если видел "Hello World" на DDD с 15 интерфейсами.
#ddd #architecture #php #strategy
📲 https://max.ru/php_lib
👉
654
9
Библиотека PHP программиста 👨🏼💻👩💻
28 мар. 2026 г., 02:15
Индексы в PostgreSQL/MySQL. Что мы забываем?
Ты добавил индекс, но запрос всё равно тормозит. Почему?
База данных не всегда использует индексы так, как вы ожидаете. Вот быстрый чеклист для проверки перед деплоем миграции.
📋 Чеклист по индексам:
1. Cardianlity (Селективность): Индекс по полю gender (M / F) почти бесполезен. Базе проще прочитать всю таблицу (Full Scan), чем прыгать по индексу, который отсеет всего 50% записей.
2. Порядок в составном индексе: Правило «слева направо».
💜Индекс (group_id, status) сработает для WHERE group_id = 5.
💜Но НЕ сработает эффективно для WHERE status = active.
3. Функции убивают индекс:
💜WHERE YEAR(created_at) = 2026 - индекс по created_at игнорируется.
💜WHERE created_at >= '2026-01-01' - индекс работает.
4. LIKE с процентом в начале:
💜LIKE '%text' - Full Scan. Индекс бесполезен.
💜LIKE 'text%' - Range Scan. Индекс работает.
5. Типы данных: Сравнение строки с числом (неявное приведение) может отключить использование индекса.
Совет: Всегда делайте EXPLAIN (или EXPLAIN ANALYZE) на сложных запросах перед выкаткой. Доверяй, но проверяй.
#database #sql #optimization #mysql #postgres
📲 https://max.ru/php_lib
👉
617
6
Библиотека PHP программиста 👨🏼💻👩💻
28 мар. 2026 г., 02:15
📷 Photo
Чтение JSON-файлов в Laravel - проще простого
📲 https://max.ru/php_lib
👉
591
6
Библиотека PHP программиста 👨🏼💻👩💻
25 мар. 2026 г., 21:00
📷 Photo
Нужно кэшировать тяжелые вычисления в Laravel?
Используй помощник once, который выполняет обратный вызов один раз и кэширует результат.
📲 https://max.ru/php_lib
👉
689
6
Библиотека PHP программиста 👨🏼💻👩💻
22 мар. 2026 г., 21:11
Полный курс Laravel Swagger. REST API Laravel
00:00:00 Введение
00:04:25 Делаем заготовку
00:16:20 Установка Swagger
00:22:18 Общие аннотации и настройки Swagger
00:28:01 CRUD со Swagger
01:03:03 Установка JWT Auth
01:13:08 Авторизация и защищенные роуты в Swagger
01:20:20 Бонус. Нестандартные тело запроса и ответа
https://www.youtube.com/watch?v=E_pkNUYmpb0
📲 https://max.ru/php_lib
👉
811
7
Библиотека PHP программиста 👨🏼💻👩💻
17 мар. 2026 г., 22:24
📷 Photo
Laravel разработчики, упростите загрузку файлов с этим инструментом! 💎
Используйте Storage::download(), чтобы принудительно запустить скачивание файла в браузере. Отлично подходит для защищенных файлов или генерации динамических загрузок.
Совет: Настройте имя файла и заголовки для большего контроля.
📲 https://max.ru/php_lib
👉
763
7
Библиотека PHP программиста 👨🏼💻👩💻
15 мар. 2026 г., 06:52
📷 Photo
Совет по Laravel💡
Хотите быстро вывести SQL-запросы, выполненные во время вашего запроса?
И не хотите устанавливать Debugbar, Telescope и т.п.?
Используйте DB::listen() с toRawSql()!
📲 https://max.ru/php_lib
👉