PHP версии 8.5 и новее поддерживает один оператор, который работает с callable-выражениями. Оператор |>
,
или pipe, принимает в правой части callable-выражение с единственным параметром и передаёт
значение в левой части в вызываемое значение, которое вычисляется как результат. В правой части
оператор принимает допустимое в PHP callable-выражение: объект класса Closure,
callable-выражение как объект первого класса,
объект, класс которого реализует метод __invoke(), и другие вызываемые значения.
Каждые две следующие строки эквивалентны.
Пример #1 Оператор |>
<?php
$result = "Привет, мир!" |> strlen(...);
print $result, PHP_EOL;
$result = strlen("Привет, мир!");
print $result, PHP_EOL;
?>
Результат выполнения приведённого примера:
21 21
Конвейерный оператор с единственным вызовом бесполезен, но принесёт пользу при множественных вызовах, которые объединяются в цепочку. Следующие два фрагмента кода эквивалентны:
Пример #2 Цепочка вызовов через оператор |>
<?php
$result = "PHP Rocks"
|> htmlentities(...)
|> str_split(...)
|> (fn($x) => array_map(strtoupper(...), $x))
|> (fn($x) => array_filter($x, fn($v) => $v != 'O'));
print $result, PHP_EOL;
$temp = "PHP Rocks";
$temp = htmlentities($temp);
$temp = str_split($temp);
$temp = array_map(strtoupper(...), $temp);
$temp = array_filter($temp, fn($v) => $v != 'O');
$result = $temp;
print $result, PHP_EOL;
?>
Результат выполнения приведённого примера:
Array ( [0] => P [1] => H [2] => P [3] => [4] => R [6] => C [7] => K [8] => S ) Array ( [0] => P [1] => H [2] => P [3] => [4] => R [6] => C [7] => K [8] => S )
В левой части оператор конвейера принимает произвольное значение или выражение, а в правой — допустимое в PHP callable-выражение, которое принимает единственный параметр. Функции с двумя или больше обязательными параметрами запрещены и вызовут ошибку, как при стандартном вызове с недостаточным количеством аргументов. В правой части оператора нельзя указывать функции, которые принимают переменную по ссылке. PHP выбросит ошибку Error, если в правую часть оператора передали значение, которое невозможно вызвать как функцию.
Замечание:
Стрелочные функции в правой части оператора конвейеризации ОБЯЗАТЕЛЬНО указывают в круглых скобках, чтобы избежать синтаксической двусмысленности, как в предыдущем примере. При нарушении требования PHP выдаст фатальную ошибку.