Pipe operator в PHP 8.6: практические примеры цепочек

Pipe operator в PHP 8.6: практические примеры цепочек

Оператор pipe (|>) был добавлен в PHP 8.5 (выпущен 20 ноября 2025 года). В PHP 8.6 (ожидается в конце 2026 года) добавлена partial function application (PFA) с использованием ? как плейсхолдера, что идеально дополняет pipe и позволяет элегантно работать с функциями, имеющими несколько аргументов.

Синтаксис:

выражение |> callable |> другой_callable

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

Ограничения:

  • Callable должен принимать аргумент по значению (не по ссылке).
  • Для функций с более чем одним аргументом в PHP 8.5 требуется замыкание или arrow-функция.
  • Arrow-функции в цепочке нужно обернуть в скобки ().
  • В PHP 8.6 с PFA это решается проще с помощью ?.

Примеры использования

Простой пример: обработка строки

// PHP 8.4 и ниже
$input = "  Hello World  ";
$result = strtoupper(trim(str_replace('World', 'PHP', $input)));
echo $result; // HELLO PHP

// PHP 8.5 с pipe
$input = "  Hello World  "
    |> trim(...)
    |> str_replace('World', 'PHP', ...)
    |> strtoupper(...);

echo $result; // HELLO PHP

Пример с array: фильтрация и трансформация

$users = ['alice', 'bob', 'charlie', 'dave'];

$filtered = $users
    |> array_filter(fn($name) => strlen($name) > 3)
    |> array_map(fn($name) => ucfirst($name))
    |> array_values(...); // сброс ключей

print_r($filtered);
// Array ( [0] => Alice [1] => Charlie [2] => Dave )

Пример с partial application (уже в PHP 8.5, но лучше в 8.6)

// PHP 8.5: замыкание
$input = "hello"
    |> fn($s) => str_replace('hello', 'hi', $s)
    |> ucfirst(...);

// PHP 8.6 (PFA): гораздо чище
$input = "hello"
    |> str_replace('hello', 'hi', ?)
    |> ucfirst(...);

Реальный пример: обработка URL

$url = "https://example.com/path?query=1"
    |> parse_url(...)
    |> fn($parts) => $parts['host'] ?? 'localhost'
    |> str_replace('example.com', 'new-domain.com', ?);

echo $url; // new-domain.com

Пример с объектами и методами

$result = new SomeCollection()
    |> $this->filter(...)
    |> $this->map(...)
    |> $this->reduce(..., 0);

Ещё один: обработка JSON

$json = '{"name": "Alice", "age": 30}'
    |> json_decode(...)
    |> fn($data) => $data->name . ' is ' . $data->age
    |> strtoupper(...);

echo $json; // ALICE IS 30

Преимущества

  • Высокая читаемость: код "течёт" сверху вниз или слева направо, как в Unix-пайпах ().
  • Отсутствие промежуточных переменных.
  • Оптимизации на уровне компилятора (особенно в сочетании с PFA).
  • Отлично подходит для функционального стиля программирования.

Когда использовать

  • Обработка строк, массивов, данных из API.
  • Конвейерные операции: валидация → трансформация → сохранение.
  • Замена вложенных вызовов функций и временных переменных в сложных выражениях.

С выходом PHP 8.6 комбинация pipe + PFA сделает такие цепочки ещё чище и выразительнее. Рекомендую обновляться на 8.5 уже сейчас, а 8.6 ждём с нетерпением!

Похожие статьи

IDE Helper генератор

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

PHP 8.5: Обзор ключевых нововведений и улучшений

Это не просто очередной минорный апдейт: разработчики сосредоточились на том, что действительно важно современным PHP-программистам — чистый, выразительный и безопасный код.

Замыкания (closures) и first-class callables в константных выражениях PHP 8.5

Замыкания и вызовы первого класса в константных выражениях PHP 8.5 — маленькая, но революционная фича, которая радикально меняет подход к декларативному коду.

Copyright © 2026 PHP Blog - шпаргалки программиста