PHP 8.5 introduced the
pipe operator
(
|>
), which passes the value on its left as the argument to the callable on its right. It works with any single-argument callable, but PHP's built-in functions and Laravel's chainable classes weren't designed around it. Piper fills that gap: it ports Laravel's collection and string methods into standalone, curried functions made to sit on the right side of a pipe.
Working on plain values
拉拉维尔的
Collection
和
Stringable
are method-chainable because you're working with a wrapper object: you
collect()
going in and call
->all()
或者
->toString()
coming out. Piper takes a different route suited to the pipe operator — its functions operate directly on native arrays and strings:
使用
功能
Spatie\Piper\Arr\
{
筛选
,
地图
,
值
,
加入
};$结果
=
[
1
,
2
,
3
,
4
,
5
,
6
]
|>
筛选
(
fn
(
整数
$i) => $i
%
2
===
0
)
|>
地图
(
fn
(
整数
$i) =>
战俘
($i,
2
))
|>
值
()
|>
加入
(
','
,
', and '
(英文):// "4, 16, and 36"
There's no wrapper instance in that pipeline. Each function takes an array, returns an array (or in the case of
join()
, a string), and the pipe operator threads the value through. It's a style that fits the
|>
syntax, and a natural companion to
Collection
when you're already working with native values.
Functions are curried for the pipe
Each Piper helper is written so that calling it with its configuration arguments returns a closure waiting for the value being piped.
filter(fn (int $i) => $i % 2 === 0)
doesn't filter anything on its own — it returns a callable that filters whatever array arrives via
|>
. That's what lets
replace('world', 'Piper')
read naturally inside a chain:
使用
功能
Spatie\Piper\Str\
{
降低
,
代替
};$问候
=
'你好世界!'
|>
降低
()
|>
代替
(
'world'
,
'Piper'
(英文):// "hello, Piper"
Mixing array and string steps
Because the functions pass native values, an array step and a string step belong to the same pipeline. A list can be reduced to a string partway through and keep going:
使用
功能
Spatie\Piper\Arr\
{
地图
,
加入
};使用
功能
Spatie\Piper\Str\
{
上
,
前缀
};$headline
=
[
'laravel'
,
'news'
]
|>
地图
(
fn
(
细绳
$word) =>
优思
($word))
|>
加入
(
' '
)
|>
上
()
|>
前缀
(
'>> '
(英文):// ">> LARAVEL NEWS"
这
Arr
namespace covers helpers like
filter
,
map
,
values
, 和
join
; the
Str
namespace covers
lower
,
upper
,
replace
,
prefix
,
suffix
, and others. The method names and behavior mirror Laravel's, so the API is already familiar if you've used
Illuminate\Support
。
安装
Piper requires PHP 8.5 for the pipe operator. Install it with Composer:
作曲家
要求
spatie/piper
Then import the functions you need from the
Spatie\Piper\Arr
和
Spatie\Piper\Str
namespaces.
Full documentation is available on the Spatie docs site , and the source is on GitHub 。






