PHP 8.5.0 RC 2 available for testing

Функциональный оператор

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 выдаст фатальную ошибку.

Смотрите также

Добавить

Примечания пользователей

Пользователи ещё не добавляли примечания для страницы
To Top