هفت مثال واقعی از pipe operator تو PHP 8.5
خلاصهٔ کاملتر
Amit Merchant تو این مقاله با هفت مثال کاربردی نشون میده pipe operator یعنی |> تو PHP 8.5 کجاها به درد میخوره. این عملگر نتیجهٔ عبارت سمت چپ رو بهعنوان اولین آرگومان به تابع سمت راست میده. یعنی بهجای تابعهای تودرتو یا بازنویسی پشتسرهم یه متغیر، مراحل از بالا به پایین خونده میشن.
اولین مثال تمیز کردن username هست: ورودی " John Doe " با سه مرحلهٔ trim، lowercase و تبدیل فاصله به خط تیره، به john-doe تبدیل میشه:
$username = $raw
|> trim(...)
|> strtolower(...)
|> (fn($x) => preg_replace('/\s+/', '-', $x));نکتهٔ مهمی که تو همهٔ مثالها دیده میشه اینه که هر مرحله باید یه callable تکآرگومانی باشه. برای تابعهایی مثل array_map یا preg_replace که چند آرگومان میگیرن، نویسنده اونا رو داخل یه arrow function یعنی fn($x) => ... میپیچه تا فقط یه ورودی بگیرن. به گفتهٔ نویسنده، اینطوری هر مرحله یه تبدیل کوچیک و قابل تسته.
بقیهٔ مثالها: پردازش ردیفهای CSV آپلودشده با سه مرحلهٔ normalize و فیلتر ردیفهای نامعتبر و ساخت آبجکت Product؛ ساخت بدنهٔ HTTP response با json_encode و بعد gzencode و base64_encode؛ آماده کردن query جستجو با حذف علامتها و شکستن به توکن و حذف توکنهای یهحرفی؛ و حساب کردن جمع سبد خرید با اعمال تخفیف هر آیتم و array_sum و اضافه کردن مالیات، اونم بدون هیچ متغیر موقت.
دو مثال آخر هم یه event لاگ رو با timestamp و request ID و IP غنی میکنن و بعد فیلدهای حساس مثل ایمیل رو mask میکنن، و یه زنجیرهٔ پردازش عکس میسازن که عکس رو لود میکنه، به 320×240 تغییر سایز میده، watermark میزنه و با کیفیت 75 بهینهش میکنه. حرف اصلی نویسنده اینه که هر جا داده باید از چند مرحلهٔ پشتسرهم رد بشه، pipe اون جریان رو مثل یه خط تولید خوانا نشون میده.
نکات کلیدی:
- |> خروجی سمت چپ رو بهعنوان اولین آرگومان به callable سمت راست میده.
- هر مرحله باید تکآرگومانی باشه؛ تابعهای چندآرگومانی داخل یه fn($x) => ... قرار میگیرن.
- syntax مثل trim(...) یه first-class callable میسازه که مستقیم تو pipe استفاده میشه.
- هفت سناریو: تمیز کردن username، پردازش CSV، ساخت HTTP response، آمادهسازی query جستجو، جمع سبد خرید، غنیسازی لاگ و ساخت thumbnail.
- نتیجهش حذف متغیرهای موقت و جدا شدن هر مرحله به یه تبدیل کوچیک و قابل تسته.




