PHP 8.5 中引入了 pipe 管道操作符,有点意思
在 PHP 8.5 中引入的 pipe 管道操作符 (|>
) 是一个非常实用的新语法特性,它为函数调用链式表达提供了更清晰的写法。传统上,如果我们需要把一个值依次传入多个函数,往往要么嵌套调用(可读性差),要么借助临时变量。管道语法的核心思想是:将左边的表达式结果,作为参数传递给右边的函数。这样可以让代码像数据流一样从左到右自然流动。
例如,过去我们可能会写:
$result = strtoupper(trim($name));
使用管道语法后,可以改写为:
$result = $name |> trim($$) |> strtoupper($$);
这里的 $$ 表示“前一个表达式的结果”。每一步处理都非常直观,逻辑顺序清晰,尤其在函数链很长时优势更明显。例如数据过滤、集合处理、字符串转换等场景,管道都能显著提升可读性。
此外,pipe 语法还支持与匿名函数或方法链结合,能够在保持语义直观的同时减少中间变量的引入。这种写法与 JavaScript、Elixir 等语言的管道理念相似,但在 PHP 中以 $$ 作为占位符,显式标明数据流位置,从而兼顾灵活性和可读性。
Linux 里的管道 |
是把前一个命令的输出作为下一个命令的输入,形成一个“流水线”。
PHP 8.5 的 |>
语法和它类似,只不过这里是把前一个表达式的结果传给后面的函数,而不是进程之间传输字节流。
举个类比:
Linux Shell
cat file.txt | grep "error" | sort | uniq -c
一步步处理文本流。
PHP 8.5
$result = $data
|> trim($$)
|> strtolower($$)
|> explode(' ', $$)
|> array_unique($$);
逻辑非常接近:都是 从左到右依次处理,避免了嵌套、临时变量。区别在于:
- Shell 管道传递的是标准输出(字符串流);
- PHP 管道传递的是表达式结果(任意数据:字符串、数组、对象)。
所以,可以把 PHP 8.5 的 pipe 看作是 “函数调用版的 shell 管道”。