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

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

Дублирование и клонирование записей с Laravel

Вам когда-нибудь приходилось дублировать или клонировать запись базы данных? Laravel предоставляет для этого очень удобную функцию.

IDE Helper генератор

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

Генератор QR Code на Laravel

Это оболочка для генератора QR-кодов для PHP, автономной библиотеки для создания QR-кодов в форматах PNG и SVG.

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