2025
🚀 PHP 8.5 新特性:管道符 |> 终于来了,用过都说爽!
一句话总结:
|>是“小语法,大能量”。它让你的代码像读自然语言一样流畅,彻底告别嵌套地狱。
💡 TL;DR(看这一节就够)
|>把左侧表达式的值,作为参数传给右侧的函数或 callable。- 关键意义不在“能不能写”,而在于 可读性与链式组合能力。
- 它与 一等可调用(first-class callables) 配合得天衣无缝。
- 这一特性经历了多轮提案、取舍和改进,终于在 PHP 8.5 正式落地。
🧩 1. 它到底是什么?
语法一眼就懂:
真正的威力来自“链式管道”:
对比没有管道时的写法:
是不是瞬间“读不下去”?
有了 |>,这类“流水线式”的逻辑终于能自然顺眼地写出来。
🧠 2. 和命令行的 | 有点像?
是的,思想一致:左边的输出就是右边的输入。
不同的是,PHP 的管道右侧是 callable,搭配 (... ) 的一等可调用语法,非常顺手。
🕰️ 3. 为什么现在才有?
简单回顾一下历程:
- 2016:Sara Golemon 提过把 Hack/HHVM 的管道语法搬来 PHP,但语法太特立独行,未通过。
- 2020/2021:社区转向“偏函数应用(PFA)”与“一等可调用”,后者率先落地。
- 2025:在 PHP Foundation 团队(Ilija Tovilo、Arnaud Le Blanc)推动下,第三次提案终于通过。
⚙️ 4. 不止“更好看”:它能叠加增益!
✅ 在 match 中更优雅
单表达式写法,逻辑顺、无中间变量,看得也舒服。
✅ 像扩展方法一样链式写
如果右边是返回闭包的函数,就能像扩展方法一样继续链下去。
更自由,不局限于语言内置方法。
✅ “空值安全”的 Maybe 风格
这几行其实就是一个迷你版的 Maybe Monad,让整条链天然空值安全。
🧩 5. 和“标量方法”有啥不同?
两者目标相似:都让链式处理更顺滑。
区别在于:
- 标量方法是 PHP 官方定义的一小撮。
|>则是通用语法,任意函数都能参与管道。
⚠️ 6. 有哪些注意点?
- 右侧必须是 callable。常见写法是
fn($x) => ...或strlen(...)。 - 多参数函数怎么办?
- 临时方案:
fn($x) => some($x, $other) - 理想方案:等 偏函数应用 PFA 落地(进行中 👀)
- 临时方案:
🔭 7. 接下来:PFA 与函数组合操作符
- 偏函数应用(PFA):允许用
?占位来“部分应用”函数,比如:
它将和 |> 成为完美搭档。
- 函数组合操作符:用于合成新函数(比如把多次
map()合并)。
预计在 PHP 8.6 登场。
🧰 8. 落地建议(给团队)
- 优先改写嵌套最深的 array_/str_ 表达式。
- 引入“函数工具箱”:如返回闭包的
map(fn)/filter(fn)。 - 约定:带额外参数时用
fn($x) => ...包裹,未来可替换为 PFA。 - 尽量在
match、三元、数组构造等场景保持“单表达式纯度”。 - 制作一页团队内部 Cheatsheet(旧写法 → 管道写法)。
🧮 9. 示例速记(可贴 Wiki)
数组统计:
字符串格式化:
match 里的数据清洗:
✍️ 最后一句话
|>是 PHP 8.5 最值得尝试的新特性。
它让你的代码从“嵌套地狱”走向“语义流畅”,
是一次让 PHP 真正读起来像人话的进化。
📚 参考来源
- The PHP Foundation:《PHP 8.5 Adds Pipe Operator: What it means》(2025-07-11)