PHP 8.5 以降では、callable に直接値を渡す演算子をサポートしています。
|>
演算子、または "パイプ" は、右辺にパラメーターをひとつ取る
callable を受け入れ、左辺値をそれに渡し、callable の結果を評価します。
右辺の callable は、有効な PHP の callable であれば何でも構いません:
つまり、Closure、
第一級callableを生成する記法、
__invoke() を実装したオブジェクトなどです。
論理的には同じ意味になる、2行のコードを以下に示します。
例1 |>
を使う
<?php
$result = "Hello World" |> strlen(...);
print $result . PHP_EOL;
$result = strlen("Hello World");
print $result . PHP_EOL;
?>
上の例の出力は以下となります。
11 11
単一の呼び出しは特に役に立ちませんが、 複数の呼び出しを一緒にチェインさせると役に立ちます。 たとえば、論理的には同じ意味になるコード片を2つ、以下に示します:
例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 か、 そのように評価できる任意の式であれば何でも構いません。 必須のパラメーターをひとつ以上とる関数を右側に指定した場合、 それは許可されず、 引数が不足した状態で関数をコールしたかのように失敗します。 リファレンスの値を取る関数も許可されていません。 右辺が有効な callable として評価されない場合、Error がスローされます。
注意:
上の例で示したとおり、文法的な曖昧さを回避するため、 アロー関数 は、 パイプ演算子と一緒に使う場合に括弧で囲わなければならない点に注意してください。 そうしない場合、致命的なエラーが発生します。