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 ждём с нетерпением!