tgindex
Пых
@phpyhВидеорусский

Блог Валентина Удальцова о разработке на PHP. Хобот @phpyhobot https://youtube.com/@phpyh https://vkvideo.ru/@phpyh https://t.me/isPHPdying Статистика: https://t.me/INOTAROBOT?start=st1219340804 Для связи используйте личные сообщения канала.

Последний пост
28 июл.
Последнее чтение
12:23
Постов за неделю
0
Всего постов
20
Тип
открытый
Язык
русский
Категория
Видео
В каталоге с
12 авг.
Подписчики
8 050
+3 за 4 дн.
Сутки
−2
−0,02%
Неделя
 
Месяц
 
Просмотров на пост
4 499
20 постов
Вовлечённость
55,9%
к подписчикам
Постов в день
0,0
всего 20
Упоминаний
4
каналов
Охват размещения
оценка
1/24сутки в ленте
3 348
1/48двое суток
3 836
1/72трое суток
4 138

Оценка по просмотрам недавних постов: пост набирает почти всё за первые сутки.

Посты

  • 28 июл.3 77516375

    Цените какое золото! Процитирую перевод: Пытаюсь использовать Claude, чтобы он помогал мне писать код, но мне просто некомфортно позволять ему редактировать мои файлы. Кто-нибудь ещё так себя чувствует? Если я несу ответственность за код, мне НЕОБХОДИМО его…

  • 16 июл.4 3335

    видео или голосовое, без подписи

  • 16 июл.3 828476из phpyhconf

    Программа Пыхника’26 У нас сразу три отличные новости! 🔥 Мы расширили программу: вместо запланированных восьми секций на Пыхнике’26 будет одиннадцать. Все доклады из шорт-листа оказались слишком крутыми, и мы решили никого не вычёркивать. Цена билета та же. 🥳 Онлайн-доклады пройдут в прямом эфире с 7 по 9 сентября. Пыхник’26 теперь не однодневное мероприятие, а целая PHP-неделя, которая завершится большой офлайн-встречей 11 сентября в Art Village. 🤩 Первый онлайн-доклад Дмитрия Dantes будет открытым! Посмотреть его смогут все желающие. 7 сентября 📹 • Компилируемый PHP: перспективы и возможности — Дмитрий Dantes 8 сентября 📹 • AI-first архитектура PHP-приложений — Дмитрий Кириллов • Возвращаем gRPC в PHP — Вадим Занфир 9 сентября 📹 • Testo: тестирование со вкусом хинкали — Алексей Гагарин 11 сентября 🏠 • Request-Reply без ожидания и блокировок — Валентин Удальцов • От скучной генерации к инженерии с ИИ — Данил Щуцкий • Ломаем PHP-системы, чтобы они не падали — Маргарита Моногарова • PHP в бинарнике на примере YiiPress — Александр Макаров • Архитектура интеграций в PHP: как пережить чужие API — Олег Мифле • AI-трансформация в PHP-команде: куда переехал bottleneck — Денис Кукуреко • Флипчарт-сессия «Архитектурный экстремизм» Программа готова — дальше дело за вами: https://planeta.ru/campaigns/pyhnik26 Билет теперь можно оплатить от компании — присылайте на conf@phpyh.ru тип, количество, реквизиты.

  • 16 июл.3 813462

    Ура, Томас (автор Rector) подтвердил наличие проблемы! Если кто-то хочет поконтрибьютить, появилась несложная задачка.

  • 15 июл.3 4064928

    Найдите ошибку в терминологии.

  • 15 июл.3 352242

    Найдите ошибку в терминологии.

  • 10 июл.5 415452

    Rector, это не то же самое!!! Пошёл делать тикет и нашёл уже существующий с ровно такой же проблемой. И знаете, что там ответил мейнтейнер? That's expected, if the type not match, that means a design issue in the first place, if property is private and…

  • 10 июл.4 942455

    Rector, это не то же самое!!! Пошёл делать тикет и нашёл уже существующий с ровно такой же проблемой. И знаете, что там ответил мейнтейнер? That's expected, if the type not match, that means a design issue in the first place, if property is private and nullable, and filled via constructor, that means the constructor should be nullable param as well as it just assign -> fill, no nullable check. Почему он неправ Есть большая разница между состоянием, в котором объект оказывается при создании, и состоянием, в которое он может прийти по ходу выполнения логики. В моём случае null означает «больше нет», а не «никогда не было». Иными словами, тип параметра описывает то, что допустимо на входе, а тип свойства — все состояния объекта за его жизнь. В первую очередь мы декларируем параметр и свойство по отдельности, и уже во вторую рассматриваем возможность склеить их в promoted, но только если типы эквивалентны. Открыл новую issue с моими пояснениями, посмотрим, дойдёт или нет... ⸻ 🌿 Приняли первый доклад на Пыхник’26!

  • 9 июл.4 53512710

    or <=> if Замешивая в 🥟 Testo Алексея Гагарина тикет про исключения, обнаружил такой фрагмент: $classOrObject->getCode() === 0 or $result->withCode($classOrObject->getCode()); Конформный пыхарь написал бы так: if ($classOrObject->getCode() !== 0) { $result->withCode($classOrObject->getCode()); } Если что, withCode() мутирующий, $result = не пропущен. Почему or, а не ||? Конкретно в этом случае разницы нет. Но вообще оператор or на самом дне списка приоритетов, даже ниже, чем присваивание. Это позволяет писать так: $x = foo() or bar(); // ($x = foo()) or bar(); $x = foo() || bar(); // $x = (foo() || bar()); Короче, как вам такой стиль кодирования?

  • 8 июл.4 5349639

    Эквайринг Т-Банка, 2026 год Повторное выставление счёта (ручка Init) бросает ошибку о том, что такой заказ уже есть, вместо того, чтобы идемпотентно вернуть ссылку на оплату (PaymentURL). Окей, допустим. План Б: оборачиваю Init в try/catch и при ошибке о дублирующемся заказе пробую GetState и CheckOrder, которые возвращают инфу о выставленном счёте. Но ни в одном из них нет PaymentURL!!! 🤬 То есть у меня есть лишь один шанс записать PaymentURL после получения ответа от Т-Банка. А если ответ не дошёл по сети? А если мой сервер упал? А если БД нагружена? А если кролик отошёл погрызть морковку? Ну как так-то нахуй... Решение, конечно, есть: при ретрае и ошибке о дубле создавать новый заказ с другим ID. Но это означает, что я уже не могу без таблички скоррелировать ID своего инвойса с ID, который использую для заказа на их стороне. А это дополнительное I/O на пустом месте, брошенные заказы в админке Т-Банка и усложнённое расследование инцидентов. Если у кого-то есть друзья в Т-Банке, попросите исправить это недоразумение.

  • 7 июл.4 26510

    Про кодогенерируемые контейнеры.

  • 7 июл.4 014347

    видео или голосовое, без подписи

  • 7 июл.4 514366

    🍆 Thesis Dic Прошло полтора года с тех пор, как я всерьёз начал пилить DI контейнер для Thesis. Набор требований у меня был большой: Модульность Всё есть модуль, включая само приложение. PHP DSL Выразительный и лаконичный, не на массивах. Типобезопасность…

  • 4 июл.4 198527из phpyhconf

    Запустили краудфандинг!!! 11 сентября в Art Village под Москвой собираем небольшую PHP-конференцию на 120 участников: один поток, 8 докладов и много живого общения. Средства на мероприятие собираем через краудфандинг. Можно взять офлайн-билет, доступ к записям, футболку «Вы вымрете, а я останусь» или просто поддержать проект любой суммой. https://planeta.ru/campaigns/pyhnik26

  • 2 июл.5 122374из phpyhconf

    видео или голосовое, без подписи

  • 2 июл.4 747393из phpyhconf

    видео или голосовое, без подписи

  • 30 июн.5 0585713

    🍆 Thesis Dic Прошло полтора года с тех пор, как я всерьёз начал пилить DI контейнер для Thesis. Набор требований у меня был большой: Модульность Всё есть модуль, включая само приложение. PHP DSL Выразительный и лаконичный, не на массивах. Типобезопасность Не строковые идентификаторы, а объекты с дженериком. Легко написать плагин статанализатора для тайпчека аргументов. Импорт/экспорт У модуля прозрачный типизированный контракт на вход (конфигурация) и на выход (экспорт сервисов). Scoped сервисы В асинхронном приложении можно писать код как в умирающем: инжектить репозиторий по интерфейсу в конструктор обработчика и не замечать, что у него под капотом транзакция, открытая специально для текущего сообщения. Disposer-коллбэки К сервису, не меняя его код, можно привязать функцию, которая будет вызвана по завершении скоупа. Удобно для закрытия ресурсов и остановки фоновых корутин. Предсказуемый автовайринг Модуль из vendor не может внезапно затереть сервис в модуле проекта. Все биндинги локализованы, нет глобального пространства имён. Автоконфигурация Возможность порефлексировать сервисы перед сборкой и по подтипу или атрибуту накинуть теги. Теги Имплементируют Tag<T> и содержат типизированные данные. Через хук можно собрать протегированные сервисы, преобразовать их и заинжектить куда угодно. First-class callable сервисы myFunc(...) и $service->method(...) легко объявить сервисами, частично применить аргументы, прочитать атрибуты и подключить как обработчики сообщений, не написав CompilerPass на 1000 строк. И вот мы здесь. 30 июня, я только что поставил тег 0.5.0 с осознанием, что до 1.0 рукой подать и я готов с вами поделиться! В README есть всё необходимое для первого знакоства, в docs/ поподробнее про часть аспектов. Буду рад скоро постримить и показать больше! https://github.com/thesis-php/dic https://github.com/thesis-php/symfony-console-module /** * @implements Module<Ref<Application>> */ final readonly class App implements Module { public function configure(Dic $dic): mixed { $dic->apply(new AutoconfigureCommands()); $dic->function(self::greet(...)); return $dic->import(new SymfonyConsoleModule(name: 'Пых')); } #[AsCommand('greet', aliases: ['g'])] private static function greet(#[Argument] string $name, SymfonyStyle $io): int { $io->title("Hello, {$name}!"); return Command::SUCCESS; } } exit(Dic::run( module: new App(), main: static fn(Application $app) => $app->run(), ));

  • 27 июн.4 96310

    Скидывайте идеи футболок под этим сообщением.👇

  • 27 июн.5 10917из phpyhconf

    видео или голосовое, без подписи

  • 26 июн.6 050111

    видео или голосовое, без подписи