پی اچ پی ورژن 8.6 داره منتشر میشه؛ یه بررسی کامل قبل از انتشار نهایی
حدود ۵ دقیقه مطالعه
پی اچ پی 8.6 هنوز رسماً منتشر نشده — feature freeze ش ۲۲ سپتامبر بسته شد، اولین release candidate دو روز بعدش اومد، و تاریخ انتشار نهایی ۱۹ نوامبر ۲۰۲۶ برنامهریزی شده. یعنی الان دقیقاً بهترین زمانه که بشینی و ببینی قراره چه چیزهایی توی این نسخه بیاد، قبل از اینکه واقعاً مجبور بشی باهاشون کار کنی. برخلاف PHP 8.5 که بیشتر یه نسخهی incremental بود، اینبار چند تا تغییر واقعاً روی نحوهی نوشتن روزمرهی کد اثر میذارن.
Partial Function Application، ستارهی این نسخه
بدون شک بحثبرانگیزترین و پرکاربردترین ویژگی این نسخه، Partial Function Application یا PFA هست. ایدهش اینه که بتونی بعضی از آرگومانهای یه تابع رو از قبل پر کنی و یه closure برگردونی که فقط بقیهی آرگومانها رو میخواد. قبلاً برای این کار مجبور بودی دستی یه closure بنویسی:
// قبل از PHP 8.6
$smsSender = function (int $uid, string $msg) {
return sendNotification('SMS', $uid, $msg);
};
حالا با سینتکس جدید و علامت ? بهعنوان جایخالی، همین کار یهخطی میشه:
// PHP 8.6
$smsSender = sendNotification('SMS', ?, ?);
$smsSender(1001, 'سفارشت ارسال شد');
یه نکتهی فنی مهم اینجاست که هر ? دقیقاً یعنی یه آرگومان که باید بعداً پر بشه، و طبق تصمیم نهایی RFC، حتی اگه پارامتر اصلی optional بوده باشه، توی closure نهایی به یه پارامتر required تبدیل میشه. مقادیری هم که موقع ساختن partial پاس میدی (مثل 'SMS' بالا)، همون لحظه ارزیابی میشن، نه موقع صدا زدن closure نهایی. جالبه که این پیشنهاد یهبار توی سال ۲۰۲۱ رد شده بود، و نسخهی دومش اینبار با رأی ۳۳ به صفر تصویب شده.
مقدار پیشفرض برای readonly property
از PHP 8.6 به بعد، میتونی به property های readonly مقدار پیشفرض بدی — چیزی که تا الان مجبور بودی حتماً توی constructor مقداردهیش کنی:
final class CreateBooksTable
{
public readonly string $name = '2026-01-01_create_books_table';
}
این تغییر کاملاً additive هست، یعنی هیچ کد قدیمیای که constructor خودش مقداردهی میکرد رو نمیشکنه.
یه Polling API یکپارچه و native
یکی از فنیترین اضافههای این نسخه یه Polling API واحده که هم توی سطح داخلی PHP و هم توی سطح userland قابل استفادهست. این API بهصورت native از event dispatch سیستمعامل استفاده میکنه: روی لینوکس از epoll، روی مک و BSD از kqueue، و روی ویندوز از WSAPoll. هدف این قابلیت اینه که پایهای برای معماریهای async نسل بعدی PHP باشه، بهجای اینکه هر کتابخونه مجبور باشه خودش یه لایهی polling جدا پیاده کنه.
Duration، یه کلاس رسمی برای زمان
کلاس جدید Time\Duration یه راه رسمی برای نمایش یه بازهی زمانی با دقت نانوثانیهست، شبیه یه stopwatch. متدهای factory برای هر واحد زمانی (ثانیه، میلیثانیه و…)، عملیات ریاضی، و مقایسه رو پشتیبانی میکنه، و حتی میتونی از یه رشتهی ISO 8601 هم بسازیش. ایده اینه که این کلاس بهجای عدد صحیح یا اعشاری خام، بهعنوان یه نوع مشترک بین توابع core و همون Polling API جدید استفاده بشه.
چند تا اضافهی کوچیکتر ولی مفید
کنار این سه ویژگی اصلی، چند تا اضافهی کوچیکتر هم توی PHP 8.6 هست که بهمرور توی کد روزمره حس میشن:
- یه تابع سراسری جدید به اسم
clamp()که یه مقدار رو در صورت خارج بودن از یه بازه، به نزدیکترین کران محدود میکنه. - توابع reflection جدید
isReadableوisWriteableبرای بررسی دقیقتر property ها. - پشتیبانی از doc comment مستقیم روی پارامترهای تابع.
- یه enum جدید به اسم
SortDirectionبرای اینکه دیگه مجبور نباشی رشتههای دستی مثل'asc'و'desc'پخش کنی. - بهبود امنیت مقادیر پیشفرض session، که برای خیلی از پروژههای قدیمی یه نقطهضعف رایج بوده.
- قابلیت debug بهتر برای enum ها، که تا الان توی
var_dumpیا دیباگ کردن همیشه کمی گنگ بودن. - پشتیبانی از
#[\Override]روی class constant ها، شبیه همون attribute ای که قبلاً فقط روی متدها قابل استفاده بود.
و یه سری deprecation، طبق روال همیشگی
مثل هر نسخهی PHP دیگهای، این نسخه هم یه سری قابلیت قدیمی رو deprecated میکنه. لیست کامل این deprecation ها هنوز داره کامل میشه، برای همین اگه پروژهی بزرگی داری، بهتره نزدیک انتشار نهایی یهبار changelog رو کامل مرور کنی، نه همین الان.
جمعبندی: ارزش صبر کردن رو داره؟
اگه بخوای یهخط جمعبندی کنی: PFA بزرگترین تغییر syntax این نسخهست و واقعاً نحوهی نوشتن callback و کد functional رو تمیزتر میکنه؛ Duration و Polling API بیشتر زیرساخت آیندهی PHP رو میسازن تا اینکه همین امروز مستقیم روی کدت اثر بذارن؛ و بقیهی موارد بیشتر quality-of-life هستن. با توجه به اینکه هنوز توی مرحلهی RC هستیم، منطقیترین کار اینه که همین حالا نسخهی بتا رو (مثلاً از طریق ایمیج داکر php:8.6-rc-cli یا کامپایل از سورس) روی یه پروژهی تست امتحان کنی، ولی برای production صبر کنی تا نوامبر که نسخهی نهایی و پایدار بیاد.
