Библиотека PHP программиста 👨🏼💻👩💻
رفتن به کانال در Telegram
Полезные материалы по PHP, Laravel, Symfony, CodeIgniter, CakePHP, Phalcon По всем вопросам @evgenycarter
نمایش بیشتر2 096
مشترکین
اطلاعاتی وجود ندارد24 ساعت
-37 روز
-730 روز
آرشیو پست ها
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
📲 Мы в MAX
👉 @php_libКогда 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
📲 Мы в MAX
👉 @php_lib🧑💻 Пишете на PHP, но всё чаще появляются задачи, где стандартного стека не хватает? Интенсивные вычисления, интеграции с нативным кодом, необходимость выжать максимум из железа — здесь в игру входят FFI и WASM.
📖 На открытом уроке поговорим о сценариях применения, типичных задачах, для которых подключают FFI или WebAssembly, и разберём реальные примеры.
❗️ Вы увидите, какие преимущества дают FFI и WASM с точки зрения производительности и гибкости и архитектуры, а также с какими рисками и ограничениями придётся считаться. Это полезно тем, кто хочет выходить за рамки классического PHP и понимать, какие инструменты есть над фреймворками.
▶️ Встречаемся 26 января в 20:00 МСК в преддверие старта курса «PHP Developer. Professional». Регистрация открыта: https://vk.cc/cTqyNa
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Индексы в 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
📲 Мы в MAX
👉 @php_lib🐘 PHP 8.5 выходит, а вы всё ещё не разобрались, какие фичи реально поменяют код, а какие останутся в релиз-нотах?
📖 На открытом уроке мы разберём, что именно вошло в релиз, какие изменения затронут ваш повседневный код и инфраструктуру, а какие можно отложить. Посмотрим на ключевые нововведения, изменения в языке и поведении, обсудим, как аккуратно внедрять их в проект.
❗️ Урок будет полезен практикующим PHP-разработчикам, которые хотят писать современный код, готовиться к обновлению продакшен-окружения и понимать, куда развивается стек. Вы получите структурированную выжимку вместо бесконечного чтения разрозненных статей.
▶️ Встречаемся 14 января в 20:00 МСК в преддверие старта курса «PHP Developer. Professional»https://vk.cc/cTkeTh
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Полный курс 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 Бонус. Нестандартные тело запроса и ответа
источник
📲 Мы в MAX
👉 @php_lib
Laravel разработчики, упростите загрузку файлов с этим инструментом! 💎
Используйте
Storage::download(), чтобы принудительно запустить скачивание файла в браузере. Отлично подходит для защищенных файлов или генерации динамических загрузок.
Совет: Настройте имя файла и заголовки для большего контроля.
📲 Мы в MAX
👉 @php_lib🧑💻 Пишете на PHP, упираетесь в производительность и всё чаще смотрите в сторону асинхронных решений? В какой-то момент вы столкнулись с ограничениями "короткоживущих" процессов и традиционного стека с PHP-FPM, особенно, при обработке "лёгких" запросов — нужны другие подходы к запуску и масштабированию приложений.
📖 На открытом уроке вы разберётесь, как устроен RoadRunner, в каких случаях он действительно даёт выигрыш и почему его выбирают для долгоживущих процессов и асинхронных задач. Мы покажем простой пример работы и разложим по полочкам сценарии применения.
❗️ Занятие будет полезно PHP-разработчикам, которые думают о производительных и асинхронных сервисах, хотят лучше понимать архитектуру и варианты горизонтального масштабирования. Вы получите конкретные идеи, как можно пересобрать свой подход к backend-части.
▶️ Встречаемся 23 декабря в 20:00 МСК в преддверие старта курса «PHP Developer. Professional»: https://vk.cc/cSrDOq
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Совет по Laravel 💡
Вам нужно использовать одни и те же правила проверки пароля для разных маршрутов пользователей (например, при регистрации и создании панели администратора)?
Обратите внимание на функцию
Password::defaults().
Ознакомьтесь со всеми правилами в документации: https://github.com/illuminate/validation/blob/master/Rules/Password.php
📲 Мы в MAX
👉 @php_libПривет, разработчики Laravel 👩💻
Начиная с Laravel v11.18.0, в методе
Str::limit() появился новый параметр preserveWords.
Пример использования метода limit() — отображение предварительных версий текстового контента, таких как резюме или отрывки блог-постов.
Раньше при использовании метода limit он мог разрывать слова посередине.
Теперь мы можем передать параметр preserveWords как true, и Laravel умно применит ограничение так, чтобы последнее слово было полным.
Это может улучшить пользовательский опыт для некоторых приложений.
📲 Мы в MAX
👉 @php_libСовет по Laravel💡
Уникальные идентификаторы запросов
Вам когда-нибудь требовалось создать код уникального идентификатора для запроса, например, для целей кэширования? Laravel поставляется с методом «
fingerprint», который позволяет вам генерировать уникальный идентификатор для ваших запросов 🚀
#laravel
📲 Мы в MAX
👉 @php_lib
اکنون در دسترس! پژوهش تلگرام ۲۰۲۵ — مهمترین بینشهای سال 
