在 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 管道”。

标签: php8

添加新评论