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 #151 · Back to latest

Older Posts 20 shown
Post #149 2.77K

Forwarded from PHP Digest

Открытое собеседование по PHP | Эпизод #2 — Прием заявок

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

Если вдруг вы не видели первый выпуск, то вот запись https://www.youtube.com/watch?v=FQNd9W3nb3A

Тем временем начинаем подготовку второго выпуска!

Требования для участия не поменялись:
• уровень middle/senior;
• PHP 7.x, PSR;
• ООП, SOLID, coupling/cohesion, вот это все;
• тестирование, PHPUnit;
• желателен опыт с Symfony 4/5;
• SQL, желательно PostgreSQL;
• представление о современных трендах в архитектуре приложений.

Темы будут ± те же, а вот вопросы подготовим новые, без Psalm 🙂

Заявку на участие можно отправить до 27 августа через форму: https://forms.gle/ES3nXiwf4ycosGEy9.

Вопросы в личку: @vudaltsov, @pronskiy.
YouTube Открытое собеседование PHP Point #1 / Валентин Удальцов vs Патрик Фельдеш О Патрике: https://career.habr.com/sspat Код для ревью: https://gist.github.com/vudaltsov/e6f7dd83a88b349cd5ee0e0d1795e5aa Задача на SQL: https://gist.github.com/vudaltsov/e3d06ef2158a248337aa262a9fb60b5f Большое спасибо Антону Мореву за помощь с трансляцией.…
Post #148 2.94K
Оказывается, для Symfony уже давно есть Psalm-плагин 😮

На радостях сделал 5 пулл-реквестов на базе стабов, которые мы скопили на рабочем проекте. Все 5 были приняты и вошли в релиз 1.4.3 ☺️

Кто до сих пор не использует статический анализ, советую просмотреть мои PR. Приёмочные тесты дадут вам некоторое представление о том, как статический анализ может вывести типизацию привычных инструментов на новый уровень.

https://github.com/psalm/psalm-plugin-symfony
GitHub GitHub - psalm/psalm-plugin-symfony: Psalm Plugin for Symfony Psalm Plugin for Symfony. Contribute to psalm/psalm-plugin-symfony development by creating an account on GitHub.
Post #147 2.74K
Отличная статья про именованные агрументы от автора Psalm Мэтта Брауна!

В ней рассказывается про нюансы использования именованных аргументов в PHP 8 и про то, как новая версия Psalm 3.14.0 поможет их снивелировать.

https://psalm.dev/articles/getting-ready-for-named-arguments
psalm.dev Getting ready for Named Arguments Named Arguments are coming to PHP with the release of PHP 8! Named Arguments will make many developers very happy, but they come with a pretty…
Post #145 3.52K
Недавно узнал, что есть подход, при котором юнит-тесты кладут рядом с тестируемыми классами 🤔

Примеры:
• https://github.com/thephpleague/flysystem/tree/2.x/src,
• https://github.com/EventSaucePHP/EventSauce/tree/master/src/Integration.

Выглядит заманчиво — не надо синхронизировать две файловые структуры и бегать туда-сюда. И на ревью сразу видно, написан тест для нового класса или нет. Также этот подход должен повысить мобильность модулей кода — модуль не надо собирать по папкам src и test, чтобы переименовать или вынести в Composer-пакет.

В библиотеках такие тесты легко удалить из архива правилом **/*Test.php export-ignore в .gitattributes. Проект можно аналогичным образом чистить перед деплойментом.

Что думаете? Приглашаю обсудить в Пыхтелку 🐯
Post #143 3.19K
Как одним выражением прочитать и изменить свойство

[$currentValue, $this->property] = [$this->property, $newValue];

Этот приём можно использовать, например, в базовом классе корня агрегата.

abstract class AggregateRoot
{
/**
* @psalm-var list<object>
*/
private array $events = [];

/**
* @psalm-return list<object>
*/
final public function releaseEvents(): array
{
▶ [$events, $this->events] = [$this->events, []];

return $events;
}

final protected function raise(object $event, object ...$events): void
{
$this->events = [...$this->events, $event, ...$events];
}
}


Некогда подглядел у @fes0r.
Post #142 2.78K
В обсуждении ребята подняли вопрос об учёте часовых поясов в функции из поста выше.

time_diff_ms() корректно учитывает временные зоны, так как сравнивает абсолютные метки времени, а не время настенных часов (wall-clock time).

Попутно мы выяснили, что метод DateTime(Immutable)::setTimezone() не изменяет абсолютное время, просто адаптирует время настенных часов под часовой пояс. Метка времени до и после setTimezone() остаётся такой же. Смотрите также комментарий к документации метода.

Добавил в Gist тесты для всех сценариев создания объекта времени.

https://gist.github.com/vudaltsov/0bb623b9e2817d6ce359eb88cfbf229d#file-time_diff_ms_test-php
Gist time_diff_ms.php GitHub Gist: instantly share code, notes, and snippets.
Post #141 2.56K
time_diff_ms(DateTimeImmutable, DateTimeImmutable): int

Вчера игрался с задержками (delay) в брокерах сообщений.
Потребовалась функция для нахождения разницы между двумя метками времени в миллисекундах.

Ловите Gist с функцией и юнит-тестом 🍭

https://gist.github.com/vudaltsov/0bb623b9e2817d6ce359eb88cfbf229d
Gist time_diff_ms.php GitHub Gist: instantly share code, notes, and snippets.
Post #140 3.11K
На прошлой неделе я провёл стрим про утечки памяти в PHP

По ссылке запись трансляции с таймкодами и разбивкой на эпизоды.

https://www.youtube.com/watch?v=NNMp-97rk9c

По результатам я предложил два изменения в Symfony, оба уже приняты:

#37705 добавить тег kernel.reset для сервиса mailer.logger_message_listener,

#37712 перенести MessageLoggerListener в конфиг mailer_debug.
Post #137 2.61K
Post #136 2.77K
Вчера в интервью 🎙 я умудрился в одно предложение засунуть сразу 4 баззворда:
функциональный язык, агрегат, Event Sourcing и чистые функции.

Спешу поделиться докладом, который придал мне столько смелости 🤣
У него довольно неочевидное название, но очень крутое содержание.

https://www.youtube.com/watch?v=USSkidmaS6w
YouTube Reinventing the Transaction Script - Scott Wlaschin The Transaction Script pattern organizes business logic as a single procedure. It has always been considered less sophisticated and flexible than a layered architecture with a rich domain model. But is that really true? In this talk, we'll reinvent the Transaction…
Post #135 2.51K
Через несколько минут я окажусь в гостях у Антона Морева на канале MoreView!

Буду ждать ваши каверзные вопросы 😅
По словам Антона, автор самого крутого вопроса получит 🍕

https://www.youtube.com/watch?v=LOrb3m0FQdU
YouTube MoreView #13 | Валентин Удальцов – Автор канала "Пых" и ведущий разработчик в Happy Job Enjoy the videos and music you love, upload original content, and share it all with friends, family, and the world on YouTube.
Post #134 2.77K
Post #133 2.52K
Как сделать тестируемым класс, использующий нечистую встроенную функцию PHP?

Очень просто — объявить функцию необязательным параметром конструктора.

final class Service
{
/**
* @psalm-var callable(): int
*/
private $time;

/**
* @psalm-param ?callable(): int $time
*/
public function __construct(?callable $time = null)
{
$this->time = $time ?? 'time';
}

public function do(): void
{
$time = ($this->time)();
}
}

$service = new Service();

$serviceForTesting = new Service(static fn (): int => 1234567890);


Не советую использовать либы-костыли типа php-mock/php-mock.
Post #132 2.3K

Forwarded from Галера Морева

​​#MoreView #13 | Валентин Удальцов – Автор канала "Пых" и ведущий разработчик в Happy Job

Продолжаю брать интервью у людей из мира PHP. На этот раз в гостях Валентин Удальцов. Я познакомился с ним в процессе организации онлайн-собеседования PHP разработчика. После предыдущего интервью с Дмитрием Елисеевым я понял что мне интересно еще поговорить про PHP и я сразу вспомнил про следующего гостя:)

В четверг в 17.00 поговорим про PHP, архитектуру, Пых, музыку и многое другое в онлайн формате. Приходите, задавайте вопросы и выигрывайте пиццу за лучший вопрос:)

Подробнее о выпуске: amorev.ru/moreview-13-valentin-udaltsov
Ссылка на трансляцию: youtu.be/LOrb3m0FQdU
Post #131 2.79K
Поиск и устранение утечек памяти в PHP с разбором реального примера

29 июля, в эту среду, в 18:00 я проведу стрим на канале PHP Point.

Примерный план:
• поговорим о видах утечек и инструментах для их поиска;
• установим один проблемный компонент Symfony и найдём в нём утечку;
• запилим быстрый фикс для проекта при помощи Compiler Pass;
• если успеем, сделаем Pull Request в репозиторий Symfony.

https://www.youtube.com/watch?v=NNMp-97rk9c
YouTube Поиск и устранение утечек памяти в PHP / Валентин Удальцов 00:00:00 Приветствие 00:02:16 Обзор утечек памяти в PHP 00:06:38 ProgressBar Symfony Console для контроля расхода памяти в консольных командах 00:11:27 MemoryInterrupter для контроля расхода памяти в демонах 00:14:34 Нюанс про память в --env=dev при работе…
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 →