PHP8.5 将在今年 11 月份发布
Pipeline Operator (|>
) 是 PHP 中一个令人兴奋的新特性,它从函数式编程中汲取灵感。它提供了一种干净、可读且富有表现力的方式来链接多个操作,无需嵌套括号或创建不必要的中间变量。
无论你是在转换数据、清理文本,还是执行一系列计算,Pipeline Operator 都能让你的 PHP 代码变得更加优雅。
在这篇文章中,我们将探索 PHP Pipeline Operator 的 8 个关键特性——每个特性都配有真实的代码示例、预期输出和实际用例。
没有 Pipeline Operator 时,多个函数调用往往会导致嵌套括号,难以阅读。
之前(没有 Pipeline):
<?php
function double($x) { return $x * 2; }
function increment($x) { return $x + 1; }
$result = double(increment(5));
echo $result; // 12
之后(使用 Pipeline):
<?php
$result = 5
|> fn($x) => $x + 1
|> fn($x) => $x * 2;
echo $result; // 12
✅ 输入:5 → increment → double
✅ 输出:12
箭头函数本身就能让代码更简洁,结合 Pipeline 使用时,它们能创建简洁的逐步转换。
<?php
$result = 10
|> fn($x) => $x * $x
|> fn($x) => $x / 2;
echo $result; // 50
✅ 输入:10 → 平方 → 减半
✅ 输出:50
虽然 PHP 没有像 JavaScript 那样的原生异步支持,但 Pipeline Operator 仍然有助于以更清洁的方式处理来自 API 或数据库的链式操作。
<?php
function fetchData($id) { return ['name' => 'John Doe']; }
function extractName($data) { return $data['name']; }
function uppercase($str) { return strtoupper($str); }
$result = 42
|> fetchData(...)
|> extractName(...)
|> uppercase(...);
echo $result; // JOHN DOE
✅ 输入:用户 ID 42
✅ 输出:"JOHN DOE"
Pipeline 让 map、filter 和 reduce 风格的转换变得更加清晰。
<?php
$numbers = [1, 2, 3, 4, 5];
$result = $numbers
|> fn($n) => array_map(fn($x) => $x * 2, $n)
|> fn($n) => array_filter($n, fn($x) => $x > 5)
|> fn($n) => array_sum($n);
echo $result; // 18
✅ 输入:[1, 2, 3, 4, 5]
✅ 输出:18
你可以避免创建额外的变量来存储中间结果。
<?php
$result = " hello "
|> fn($x) => trim($x)
|> fn($x) => strtoupper($x)
|> fn($x) => "🔹 {$x} 🔹";
echo $result; // 🔹 HELLO 🔹
✅ 输入:" hello "
✅ 输出:"🔹 HELLO 🔹"
对于逐步的字符串转换来说非常棒。
<?php
$result = " PHP is awesome "
|> fn($x) => preg_replace('/\s+/', ' ', $x)
|> fn($x) => trim($x)
|> fn($x) => strtolower($x)
|> fn($x) => "📢 {$x} 📢";
echo $result; // 📢 php is awesome 📢
✅ 输入:" PHP is awesome "
✅ 输出:"📢 php is awesome 📢"
如果你使用像 Laravel Collections 或 Ramda 风格的 PHP 包这样的库,Pipeline 让链式调用更加明确。
<?php
use Illuminate\Support\Collection;
$result = collect([1, 2, 3, 4, 5])
|> fn($c) => $c->map(fn($x) => $x * 2)
|> fn($c) => $c->filter(fn($x) => $x > 5))
|> fn($c) => $c->sum();
echo $result; // 18
✅ 输入:[1, 2, 3, 4, 5]
✅ 输出:18
由于每个转换都是独立的步骤,你可以轻松记录中间值。
<?php
$result = 5
|> fn($x) => $x + 1
|> function($x) {
var_dump($x); // 在这里调试
return $x * 2;
};
echo $result; // 12
✅ 调试输出:int(6)
✅ 最终输出:12
PHP Pipeline Operator (|>
) 让代码更具可读性、可维护性和表现力——特别是在处理多步转换时。
它在以下场景中特别有用:
一旦你开始使用它,你会想知道没有它的时候是怎么写 PHP 的。