TGViewer
Channel Public Channel
Пых

Пых

@phpyh

Блог Валентина Удальцова о разработке на PHP.

Хобот @phpyhobot
https://youtube.com/@phpyh
https://vkvideo.ru/@phpyh
https://t.me/isPHPdying

Статистика: https://t.me/INOTAROBOT?start=st1219340804

Для связи используйте личные сообщения канала.
Subscribers
7.82K
Photos
287
Videos
20
Links
629

Showing posts older than #173 · Back to latest

Older Posts 20 shown
Post #171 4.42K
⚠️ Команда Symfony снова шалит в патч-апдейте 4.4.15 / 5.1.7 😏

Если вы вносили правки, описанные мной в посте от 28 сентября, то придётся их откатить: удалить src/.preload.php и убрать соответствующие правила из .gitignore и конфигов инструментов.

После этого нужно добавить в репозиторий (без игнора) один из вариантов файла config/preload.php из обновленного рецепта. В папку с конфигами у меня статанализ не ходит, поэтому на этот раз исключение добавлять не пришлось.

Если у вас ядро располагается в нестандартном месте, то файл var/cache/prod/App_KernelProdContainer.preload.php будет называться иначе. Вот как получить верный путь:

bin/console c:c --env=prod
find var/cache/prod -name '*.preload.php'
Symfony Symfony 4.4.15 released (Symfony Blog) Symfony 4.4.15 has just been released.
Post #170 4.24K
Четверо в YouTube, не считая кота 🐈

Вчера у нас получился любопытный стрим про рефакторинг. Приятная компания, интересное задание и достойная организация. Спасибо всем, кто слушал, комментировал и потом писал в личку ✊

Вкратце для тех, кто ещё не посмотрел. Я поленился по-честному отрефакторить yiisoft/validator, вместо этого воспользовался лазейкой "мажорный релиз" и предложил альтернативную архитектуру для библиотеки 😅

Что у меня получилось: https://github.com/phpyh/validator.
Мои пояснения на вчерашнем стриме: https://youtu.be/liMyAuxIoyM?t=4308.
Post #169 3.25K
Post #168 3.12K
Audio
Несколько перлов с подкаста для затравки 🍉
Post #167 3.33K
Подкаст { Между скобок } про статический анализ

На прошлой неделе Сергей Жук предложил мне обсудить статанализ, и я был бы не я, если бы упустил возможность ввернуть пару монологов про Psalm 😆

И вот о чём мы поговорили:
• почему PHP пошел в сторону строгой типизации,
• для чего нужны статические анализаторы и как они работают,
• будущее статических анализаторов.

https://soundcloud.com/between-braces/11-valentin-udaltsov-staticheskiy-analiz
Post #166 3.32K
Приглашаю всех на стрим о рефакторинге!

В четверг вечером я с Леонидом Корсаковым буду в прямом эфире "наперегонки" комментировать и рефакторить одну известную open source библиотеку. Посмотрим, что из этого выйдет 😅

1 октября / четверг / 19:00

Организаторы из Skyeng обещают призы 🎁:
🐘 фирменного PHP слона за лучшую зрительскую историю о рефакторинге,
🔑 несколько лицензий на PhpStorm за вопросы в эфире голосом!

https://www.youtube.com/watch?v=liMyAuxIoyM
YouTube Рефакторим c Александром Макаровым, Валентином Удальцовым, Валентином Назаровым, Леонидом Корсаковым В четверг Александр Макаров (Yii) и Валентин Назаров (Skyeng) проведут стрим, на котором Валентин Удальцов (Пых) и Леонид Корсаков (PHP Kazan): • посмотрят на код популярного гитхаб-проекта, • найдут, что там порефакторить (и порефакторят), • поделятся своими…
Post #165 3.37K
⚠️ Небольшое сообщение для тех, кто обновил Symfony до 4.4.14 / 5.1.6

Обратите внимание, что рядом с вашим src/Kernel.php появился автогенерируемый файл .preload.php (#38140, #38142, документация).

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

Спасибо @Taarim за наводку 😊
Symfony Symfony 4.4.14 released (Symfony Blog) Symfony 4.4.14 has just been released.
Post #163 3.01K
Сегодня ребята в Пыхтелке активно обсуждают JWT vs Server Side Sessions, поддерживаю разговор мыслями и ссылками.

• Сессии — это абсолютно валидный, неустаревший подход. Не стоит переписывать аутентификацию из-за хайпа вокруг JWT.
• Сессии усложняют горизонтальное масштабирование, но так ли остро стоит этот вопрос в вашем проекте?
• Стандарт JWT действительно несовершенен, история помнит несколько серьёзных уязвимостей в его реализациях. Но в 2020 это не так актуально, просто проверьте, что вы обновили библиотеки.
• JWT не предусматривает простого механизма инвалидации токена. Либо придётся выставлять короткий Expiration Time, либо строить сложный statefull механизм для гибкого контроля выданных токенов.
• JWT удобен для организации временного ограниченного доступа к конкретным операциям/ресурсам: эндпойнтам API, файлам, действиям по ссылкам из персонализированных рассылок.
Post #162 4.18K
Ищу к себе в команду middle PHP-разработчика

В Happy Inc мы исследуем вовлечённость и лояльность персонала в крупных компаниях. По-простому — собираем данные и строим отчёты. Но всё это приправлено многогранной бизнес-логикой, сложной авторизацией и прочими ноу-хау.

PHP 7.4 / Symfony 5.1 / PostgreSQL 12 / OpenAPI / CQRS / ES / DDD / Psalm на максималках и всё, о чём я тут рассказываю 😜

Full-time, Москва, БЦ Варшавка Sky, ЗП по результатам собеса.

https://happy-job.ru/vacancy-super-php-2020-10

Резюме можно присылать сразу мне @vudaltsov.
Post #160 3.28K
Вспомнил, что ещё в декабре мы горячо обсуждали этот нюанс в чате @symfony_php.

В результате прений я сделал Pull Request, который привёл в соответствие поведение Symfony Serializer.

https://github.com/symfony/symfony/pull/34791
GitHub [Serializer] Skip uninitialized (PHP 7.4) properties in PropertyNormalizer and ObjectNormalizer by vudaltsov · Pull Request #34791… Q A Branch? 3.4 Bug fix? yes New feature? no Deprecations? no Tickets n/a License MIT Doc PR n/a When trying to read from an uninitialized property in PHP 7.4, a TypeError is gen...
Post #158 3.92K
Наброски системы плагинов для Infection от @ocramius

https://github.com/infection/infection/issues/1323

Пример того, как надо оформлять RFC issue в проектах с открытым исходным кодом 👍

Кстати, интересно, что тикеты в Infection (фреймворк Максима Рафалко для мутационного тестирования) уже не в первый раз становятся источником знаний и вдохновения для PHP сообщества 🔥

Также смотрите треды в Twitter на эту тему:
• https://twitter.com/Ocramius/status/1302886222747119616,
• https://twitter.com/slamzoe/status/1302909388894724101.
GitHub Plugin system to allow pre-/post- filtering and modification of mutations · Issue #1323 · infection/infection Scope - third-party tools integration The idea is relatively simple: some mutations don't make sense, according to other tools that are completely third-party to infection. Such tools could say...
Post #155 3.89K
Пояснение к моей задаче на канале PHP задачи с собеседований.

Метод __get() выполняется при попытке чтения из недоступных (защищённых или приватных) или несуществующих свойств. Публичное неинициализированное типизированное свойство таковым не является.

Интересно, что вызов магических методов для неинициализированных свойств изначально был предусмотрен в RFC: Typed Properties 2.0 и имплементирован в 7.4.0. Однако после обсуждения различных WTF кейсов этот функционал был удалён в 7.4.1.

Чтобы всё-таки стриггерить __get, __set, __isset или __unset для типизированного свойства, необходимо сначала "удалить" его через unset: https://3v4l.org/RbFFM.

Пара статей про ленивую инициализацию свойств:
• https://ocramius.github.io/blog/intercepting-public-property-access-in-php/,
• https://ocramius.github.io/blog/lazy-property-automatic-property-initialization/.
Telegram PHP задачи с собеседований Что выведет код?
Post #153 3.16K
> Вам нужны условия Йоды только если ваши тесты 💩 и вы думаете, что перестановка аргументов сравнения имеет большее значение, чем корректная запись ваших бизнес-правил.

https://twitter.com/frankdejonge/status/1298602389281411072

Мы используем в проекте условия Йоды (и фиксер yoda_style), но этот твит заставил меня задуматься, зачем 🤣

Когда-то давно я бы ответил "потому что так в Symfony Coding Standards", позже "потому что так удобнее присваивать результат сравнения", сегодня "только потому что привык".
Twitter Frank de Jonge You only need yoda-conditions if your test suit is 💩 and you think switching your comparator values is better than proofing your business-rules are functioning as they should. Don't #[At] me.
Post #152 3.37K
Рекомендую доклад Temporal Modeling.

Mathias Verraes демонстрирует, как моделировать поведение через события и процессы, а не структуры данных и состояние. Такой подход повышает эффективность взаимодействия с бизнесом и позволяет ещё на этапе обсуждения выявить больше нюансов предметной области.

https://youtu.be/hh5lskgATCk

Список всех докладов Матиаса на эту тему
Post #151 2.93K
Раньше, чтобы создать nullable ValueObject из nullable примитива, приходилось писать колбасу вроде

null === $stringClientId ? null : ClientId::fromString($stringClientId)
.

Сегодня условные типы Psalm позволяют перенести if в статический конструктор:

/**
* @template T of ?string
* @psalm-param T $id
* @psalm-return (T is null ? null : self)
*/
public static function fromString(?string $id): ?self
{
if (null === $id) {
return null;
}

Assert::uuid($id);

return new self($id);
}

ClientId::fromString($stringClientId)


https://psalm.dev/r/ab0090be4c
psalm.dev Conditional love Before Psalm was open-sourced, I had to first get it working on Vimeo’s codebase. One of the early hurdles was picking a return type for the…
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →