TGViewer
Пых Пых @phpyh · 7.86K subscribers
Post #731 7.79K
RFC Pipe operator принят, заглянем в будущее!

https://wiki.php.net/rfc/pipe-operator-v3

Команда Typhoon, в особенности Андрей Клименко, очень внимательно следила за этим RFC. Недавно о нём писали фартаны, теперь RFC принят, и я хочу разрешить ваш скепсис.

Вот вам реальный сниппет из исходников Хобота, который формирует и отправляет запрос в Т-Банк:


$normalizedMessage = $this->normalizer->normalize($message);
$requestData = $this->prepareRequestData($normalizedMessage);
$request = $this->buildRequest($endpoint, $requestData);
$response = $this->httpClient->request($request);
$responseBody = $response->getBody();

// Тут дальше логирование, проверка статус-кода и денормализация.


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


$responseBody =
$this->normalizer->normalize($message)
|> $this->prepareRequestData(...)
|> fn (array $data): Request => $this->buildRequest($endpoint, $data)
|> $this->httpClient->request(...)
|> fn (Response $response) => $response->getBody()
;


Стало лучше? Спорно. Но этот RFC — лишь первый шаг Ларри в сторону реально крутых пайпов. Нам нужно изучить Future Scope, чтобы понять весь замысел.

Помечтаем. Ноябрь 2026, и я рефакторю код уже вот так:


$responseBody =
$this->normalizer->normalize($message)
|> $this->prepareRequestData(...)
|> $this->buildRequest($endpoint, ?)
|> $this->httpClient->request(...)
|> $$->getBody()
;


Теперь действительно выглядит круто. Разберёмся, что тут происходит.

? — это partial function application, как first class callable syntax (...), но с возможностью передать (применить) часть аргументов и выбрать вопросами параметры для результирующей функции:


$this->buildRequest($endpoint, ?)
// дешугарится в
fn (array $data): Request => $this->buildRequest($endpoint, $data)


Кстати, для PFA Ларри уже делал RFC 5 лет назад. Но тогда возникли трудности с реализацией и Никита Попов предложил (...) в качестве более простой альтернативы. Теперь же потребность в ? сильно возросла и, я уверен, будет найдено решение.

$$ — это, грубо говоря, "object application":


$$->getBody()
// дешугарится в
static fn ($object) => $object->getBody()


Этот RFC — большой шаг для развития функционального стиля в PHP. Уже сейчас проекты fp4php и Crell/fp начинают играть новыми красками, а с ? и $$ будет вообще кайф.
_______

Пссс, сегодня в 16:00 19:30 на канале Пых.конф’25 появится конкурс, приз — бесплатный билет на конференцию. Подписывайся, чтобы не пропустить!
  • 🤮 116
  • 👍 27
  • 🔥 20
  • 🤔 12
  • 🥴 7
  • ❤ 5
More from @phpyh
  1. Sep 15, 2026Сейчас один человек с AI может выполнять работу целого IT-отдела. Только хуёво
  2. Sep 12, 2026Спасибо за заявки! Всем напишу в понедельник. Осталось 1 место.
  3. Sep 11, 2026Хардкорный курс асинхронного PHP https://hardcourse.ru/php/async
  4. Sep 11, 2026Ещё полчасика надо — сайт готов, расписываю программу! 🙏
  5. Sep 10, 2026Краткое содержание: завтра в 12:00 открываю набор на Хардкорный курс асинхронного PHP с уч…
  6. Sep 10, 2026Post #1011
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 →