TGViewer
| AmirHossein | | AmirHossein | @amirhdeveloper · 612 subscribers
Post #487 681
عملگر پایپ (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
.
  • 👍 6
  • ❤ 2
  • 🔥 2
  • 👎 1
  • 🍓 1
  • 🙉 1
More from @amirhdeveloper
  1. Sep 23, 2026از امروز با کاهش شدید حاکرها مواجه میشیم
  2. Sep 19, 2026🔴 سوال سوم دو Region دارید: US-East و EU-West. کاربران در هر دو Region هستند. سیستم باید…
  3. Sep 19, 2026🟠 سوال دوم فرض کنید Service A به Service B درخواست می‌زند. B به‌دلیل overload، latency با…
  4. Sep 19, 2026🟢 سوال اول فرض کنید یک سرویس backend داریم که به PostgreSQL وصل می‌شود. تعداد requestها ن…
  5. Sep 19, 2026خیلی وقته پست‌های کانال فقط درمورد LaraGram بوده، وقتشه یکم جالب‌ترش کنیم اگر ممبرها هنوز…
  6. Sep 14, 2026پکیج LaraGram Brain منتشر شد و با استفاده از اون دیگه نیازی به کد نوشتن برای ساخت ربات‌هات…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →