پی‌اچ‌پی ۸.۵؛ اپراتور لوله، Clone With و قابلیت‌های تازه

PHP 8.5

پی‌اچ‌پی ۸.۵؛ اپراتور لوله، Clone With و قابلیت‌های تازه

5 تیر 1405
نویسنده: ماهان
بدون دیدگاه

پی‌اچ‌پی نسخهٔ ۸.۵ در تاریخ ۲۰ نوامبر ۲۰۲۵ به‌صورت رسمی منتشر شد و یکی از پربارترین نسخه‌های این زبان در سال‌های اخیر به شمار می‌رود. این نسخه علاوه بر بهبود کارایی، چند قابلیت زبانی مهم را معرفی می‌کند که کیفیت و خوانایی کد را به‌طور محسوسی بالا می‌برد. در این مقاله مهم‌ترین تغییرات PHP 8.5 را با مثال‌های عملی مرور می‌کنیم.

اپراتور لوله (Pipe Operator) با نماد |>

شاخص‌ترین قابلیت جدید این نسخه، اپراتور لوله است. این اپراتور به شما اجازه می‌دهد خروجی یک تابع را بدون نیاز به متغیرهای واسط و بدون تو‌در‌تو شدن فراخوانی‌ها، به‌صورت زنجیره‌ای از چپ به راست به تابع بعدی پاس بدهید. نتیجه، کدی خواناتر و نزدیک‌تر به سبک برنامه‌نویسی تابعی است.

// روش قدیمی و تو‌در‌تو
$result = array_sum(array_map(fn($n) => $n * 2, array_filter($numbers, fn($n) => $n > 0)));

// با اپراتور لوله در PHP 8.5
$result = $numbers
    |> fn($arr) => array_filter($arr, fn($n) => $n > 0)
    |> fn($arr) => array_map(fn($n) => $n * 2, $arr)
    |> array_sum(...);

کلون همراه با تغییر مقدار (Clone With)

تا پیش از این، تغییر مقدار یک شیء readonly پس از کلون‌گرفتن دردسرساز بود. در نسخهٔ ۸.۵ سینتکس جدید clone() امکان می‌دهد همزمان با کلون‌کردن، مقدار پراپرتی‌ها را به‌روزرسانی کنید. این موضوع پیاده‌سازی الگوی «with-er» را برای کلاس‌های تغییرناپذیر بسیار ساده می‌کند.

final class Money {
    public function __construct(
        public readonly int $amount,
        public readonly string $currency,
    ) {}
}

$price = new Money(1000, 'IRR');
$discounted = clone($price, ['amount' => 800]);

افزونهٔ داخلی URI

یکی از کمبودهای دیرینهٔ PHP، نبود ابزار استاندارد برای تجزیه و نرمال‌سازی نشانی‌ها بود. PHP 8.5 یک افزونهٔ داخلی URI معرفی می‌کند که بر اساس استانداردهای RFC 3986 و WHATWG URL کار می‌کند و دیگر نیازی به پیاده‌سازی دستی یا پکیج‌های جانبی برای کار با URL نخواهید داشت.

صفت ‎#[\NoDiscard]‎

این صفت جدید به شما اجازه می‌دهد توابع یا متدهایی را علامت‌گذاری کنید که نادیده‌گرفتن مقدار بازگشتی‌شان احتمالاً یک اشتباه است. اگر برنامه‌نویس مقدار بازگشتی را استفاده نکند، هشدار صادر می‌شود. این قابلیت برای طراحی API های ایمن‌تر بسیار کاربردی است.

#[\NoDiscard("نتیجهٔ این عملیات باید بررسی شود")]
function saveToDatabase(array $data): bool {
    // ...
    return true;
}

saveToDatabase($data); // هشدار: مقدار بازگشتی نادیده گرفته شد

توابع جدید آرایه

دو تابع پرکاربرد array_first() و array_last() برای دریافت اولین و آخرین مقدار یک آرایه اضافه شده‌اند. این توابع مکمل array_key_first() و array_key_last() هستند که از PHP 7.3 وجود داشتند و دیگر نیازی به ترفندهایی مثل reset() و end() نخواهید داشت.

$users = ['ali', 'sara', 'reza'];
echo array_first($users); // ali
echo array_last($users);  // reza

کلوژرها در عبارت‌های ثابت

اکنون کلوژرهای static و callable های درجه‌یک می‌توانند در عبارت‌های ثابت (constant expressions) از جمله در پارامترهای صفت‌ها (attributes) استفاده شوند. این تغییر انعطاف بیشتری در متادیتای کلاس‌ها فراهم می‌کند.

سایر بهبودها

چند تغییر زیرساختی مهم نیز در این نسخه دیده می‌شود. اول اینکه OPcache از این نسخه همیشه به‌صورت کامپایل‌شده در دسترس است، که یعنی بهینه‌سازی کارایی به‌صورت پیش‌فرض روشن خواهد بود. دوم، قابلیت backtrace برای خطاهای fatal اضافه شده است؛ با تنظیم INI جدید fatal_error_backtraces یک ردپای کامل از پشتهٔ فراخوانی به خطاهای کشنده افزوده می‌شود که فرایند دیباگ را بسیار ساده‌تر می‌کند. این قابلیت صفت #[\SensitiveParameter] را نیز رعایت می‌کند تا داده‌های حساس در لاگ‌ها فاش نشوند.

جمع‌بندی

پی‌اچ‌پی ۸.۵ ترکیبی هوشمندانه از قابلیت‌های زبانی مدرن و بهبودهای زیرساختی است. اپراتور لوله و clone with خوانایی کد را بالا می‌برند، افزونهٔ URI و توابع جدید آرایه نیازهای روزمره را پوشش می‌دهند، و فعال‌بودن همیشگی OPcache همراه با backtrace خطاهای fatal تجربهٔ توسعه و عملکرد را بهتر می‌کند. اگر روی پروژه‌های لاراول یا PHP خالص کار می‌کنید، ارتقا به این نسخه ارزش بررسی جدی دارد؛ هرچند پیش از به‌روزرسانی محیط پروداکشن، حتماً سازگاری وابستگی‌ها و تست‌های خودکار را بررسی کنید.

نوشتن دیدگاه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *