عملگر پایپ (Pipe Operator) در PHPعملگر پایپ (
|> ) از
PHP 8.5 با هدف سادهسازی جریان داده و افزایش خوانایی کد اضافه شده است. این عملگر امکان میدهد خروجی یک عبارت بهعنوان ورودی تابع بعدی استفاده شود؛ بدون آنکه نیاز به تو در تو کردن فراخوانیها یا استفاده از متغیرهای موقتی باشد.
ساختار کلی عملگر پایپ:
$value |> callable;
در این ساختار:
- مقدار سمت
چپ (
value) محاسبه شده و سپس به تابع سمت
راست (
callable) ارسال میشود، و نتیجهٔ آن تابع، خروجی نهایی عبارت خواهد بود.
- تابع سمت راست باید فقط یک پارامتر لازم داشته باشد؛ زیرا همان یک پارامتر از پایپ دریافت میشود.
- نماد (
... ) پس از نام تابع، بیانگر این است که پارامتر آن تابع از طریق عملگر پایپ وارد میشود.
چند مثال:پیش از اضافه شدن پایپ تواع پشت سر هم نوشته میشد:
$result = strtolower(trim($title));
یا از متغیرهای موقتی استفاده میشد:
$trim = trim($title);
$result = strtolower($trim);
اما با استفاده از پایپ می توان ساختار تمیزتر و قابل فهمتری را داشته باشیم:
$result = $title
|> trim(...)
|> strtolower(...);
ترتیب اجرای عملیات کاملا روشن و خوانا است:
ابتدا
trim، سپس
strtolower.
ترکیب توابع استاندارد با Closure$slug = $title
|> trim(...)
|> (fn($s) => str_replace(' ', '-', $s))
|> strtolower(...);
از آنجایی که گفته شد توابع تنها یک متد داشته باشند، برای توابع با چند متد میتوان از
کلوژرها استفاده کرد.
در این مثال
str_replace نیاز به پارامترهای بیشتری است به همین دلیل از
arrow-function استفاده شده.
عملیات روی آرایه$clean = $items
|> (fn(array $arr) => array_map(fn($x) => trim($x), $arr))
|> (fn(array $arr) => array_filter($arr, fn($x) => $x !== ''))
|> array_values(...);
چنین زنجیرهای بدون استفاده از پایپ، بهطور معمول شامل متغیرهای واسطه یا تو در تویی توابع خواهد بود؛ اما با استفاده از پایپ، تمامی مراحل به صورت خوانا پشت سر هم نوشته شدهاند.
مزایای استفاده از عملگر پایپ:- جریان داده از بالا به پایین قابل مشاهده است و عملیات به شکلی خطی بیان میشوند.
- بهجای اینکه توابع داخل یکدیگر قرار بگیرند، هر تابع بهطور مستقل در یک مرحله اجرا میشود.
- نیازی به ایجاد متغیر برای ذخیرهٔ نتیجهٔ هر مرحله نیست.
محدودیتها و نکات مهم:- توابعی که بیش از یک پارامتر ضروری دارند، مستقیماً با پایپ قابل استفاده نیستند.
"hello world" |> explode(' ', ...); // ERROR
"hello world" |> (fn($v) => explode(' ', $v)); // correct- توابعی که پارامترشان با ارجاع (By Reference) دریافت میشود قابل استفاده نیستند (مانند
array_pop یا
sort)
- اگر تابعی مقدار بازگشتی نداشته باشد (
void)، نتیجهٔ عملیات
null خواهد بود و استفادهٔ آن در میانهٔ زنجیره صحیح نیست.
به طور کلی عملگر پایپ در
PHP 8.5 امکان نگارش کدی خواناتر، مرحلهای و ساختیافته را فراهم میکند.
این عملگر با ارسال خروجی هر مرحله به مرحلهٔ بعد، جریان داده را سادهسازی میکند و برای پردازش رشتهها، آرایهها و دادههای میانمرحلهای بسیار مناسب است.
در مقابل، محدودیتهایی نظیر نیاز به تکپارامتری بودن تابع یا عدم پشتیبانی از توابع دارای ارجاع وجود دارد که باید در استفادهٔ روزمره مورد توجه قرار گیرد.
@AmirhDeveloper.