Piper: هلپرهای آرایه و رشته برای پایپ اوپراتور PHP 8.5
خلاصهٔ کاملتر
PHP 8.5 یه اوپراتور جدید به اسم pipe operator یا |> اضافه کرد. کارش اینه که مقدار سمت چپش رو به عنوان آرگومان به callable سمت راست میفرسته. مشکل اینجاست که توابع built-in پیاچپی و حتی کلاسهای لاراول از قبل برای این سینتکس طراحی نشدن. پکیج Piper از تیم Spatie اومده این خلأ رو پر کنه.
Piper متدهای آشنای Collection و Stringable لاراول رو به صورت توابع curried مستقل پیادهسازی کرده. تفاوت اصلیش با روش لاراول اینه که اینجا هیچ wrapper object ای در کار نیست — توابع مستقیم روی آرایه و رشتههای native کار میکنن و خروجی هم همون نوع nativeهاست.
نکتهی جالب curried بودن توابعه. یعنی وقتی مثلاً filter(fn($i) => $i % 2 === 0) رو صدا میزنی، هنوز چیزی فیلتر نشده — این فراخوانی یه closure برمیگردونه که منتظره مقدار از طریق |> بهش برسه. این طراحی دقیقاً باعث میشه استفاده از توابع توی chain طبیعی و خوانا به نظر برسه:
$result = [1, 2, 3, 4, 5, 6]
|> filter(fn (int $i) => $i % 2 === 0)
|> map(fn (int $i) => pow($i, 2))
|> values()
|> join(', ', ', and ');
// "4, 16, and 36"یه ویژگی مفید Piper اینه که میشه مراحل آرایهای و رشتهای رو توی یه pipeline واحد ترکیب کرد. چون همه توابع با مقادیر native کار میکنن، وقتی join() آرایه رو به رشته تبدیل کرد، میشه بلافاصله توابع رشتهای مثل upper() یا prefix() رو ادامه داد.
Piper دو namespace داره: Spatie\Piper\Arr برای کار با آرایهها (شامل filter، map، values، join و غیره) و Spatie\Piper\Str برای رشتهها (شامل lower، upper، replace، prefix، suffix و غیره). اسم متدها و رفتارشون عمداً شبیه لاراول طراحی شده، پس اگه با Illuminate\Support کار کرده باشی، API کاملاً آشناست.
برای نصب به PHP 8.5 نیاز داری و پکیج رو میشه از طریق Composer اضافه کرد: composer require spatie/piper. مستندات کامل روی سایت Spatie و سورس کد هم روی GitHub در دسترسه.
نکات کلیدی:
- Piper هلپرهای آرایه و رشتهی لاراول رو برای پایپ اوپراتور PHP 8.5 بازنویسی کرده
- توابع curried هستن: با آرگومانهای کانفیگ صدا زده میشن و یه closure برمیگردونن
- بدون wrapper object کار میکنه — مستقیم روی آرایه و رشتههای native
- میشه مراحل آرایهای و رشتهای رو توی یه pipeline ترکیب کرد
- نیاز به PHP 8.5 داره؛ نصب با composer require spatie/piper




