PHP 8.6 نوزدهم نوامبر میاد
خلاصهٔ کاملتر
به گزارش لاراولنیوز، انتشار سالانهٔ PHP نزدیکه: نسخهٔ 8.6 قراره ۱۹ نوامبر ۲۰۲۶ بیرون بیاد. الان تو مرحلهٔ بتاست، فریز ویژگیها ۲۲ سپتامبره و اولین RC دو روز بعدش میاد. مدیران این انتشار Daniel Scherzer، Matteo Beccati و Joe Ferguson هستن.
بزرگترین تغییر partial function application ـه (یعنی تابع رو با بخشی از آرگومانها صدا میزنی و یه closure تحویل میگیری که بقیهشو میگیره). جایگذار ? یه آرگومان رو برای بعد نگه میداره و ... جای همهٔ آرگومانهای باقیمونده میشینه:
$makeSlug = str_replace(' ', '-', ?);
$makeSlug('Hello World'); // Hello-World
$titles = array_map(strtolower(?), $titles);اون closure اسم، تایپ و مقدار پیشفرض پارامترهای تابع اصلی رو نگه میداره. آرگومانهایی هم که میدی همون لحظهٔ ساختن partial ارزیابی میشن، نه موقع صدا زدنش. یه RFC تکمیلی تعیین کرد که هر ? روی closure یه پارامتر اجباری میشه، حتی اگه تو تابع اصلی اختیاری بوده. نسخهٔ اول این پیشنهاد سال ۲۰۲۱ رد شده بود؛ نسخهٔ دوم ۳۳ به ۰ رأی آورد.
تابع تازهٔ clamp() اگه مقدار بین دو حد باشه خودش رو برمیگردونه، وگرنه نزدیکترین حد رو میده. با هر تایپ قابلمقایسه کار میکنه، حتی رشته و DateTime، و اگه $min از $max بزرگتر باشه ValueError پرت میکنه. جای همون الگوی min(max($value, $min), $max) رو میگیره که راحت برعکس نوشته میشه. کلاس Time\Duration هم اومده: final و readonly، با دقت نانوثانیه، متد کارخانهای برای هر واحد و پشتیبانی از عملگرهای مقایسه. قراره تایپ مشترکی باشه که هسته بهجای int و float خام قبول کنه.
چندتا تغییر کوچیکتر هم هست. پراپرتیهای readonly حالا مقدار پیشفرض میگیرن، که قبلش خطای زمان کامپایل بود. داککامنت رو میشه مستقیم روی خود پارامتر گذاشت و ReflectionParameter::getDocComment() میخونتش، پس دیگه لازم نیست اسم پارامتر رو تو تگ @param تکرار کنی. enumها اجازهٔ تعریف __debugInfo() گرفتن تا خروجی var_dump() قابل تنظیم بشه، و یه enum سراسری SortDirection اضافه شده که فعلاً هیچجای هسته قبولش نمیکنه و صرفاً تایپ مشترکیه برای کتابخونهها.
دو کار زیرساختی هم شده. فضای نام Io\Poll یه رابط یکپارچه روی مکانیزمهای polling سیستمعامل میذاره (epoll روی لینوکس، kqueue روی BSD و مک، event ports روی سولاریس و WSAPoll روی ویندوز) و جایگزین stream_select() برای کسیه که event loop مینویسه؛ به گفتهٔ RFC انگیزهٔ اصلیش داخلیه: مدیریت سیگنال و بهبود FPM. استریمها هم مدل خطای یکدست گرفتن: گزینهٔ error_mode بین warning، exception و سکوت انتخاب میکنه و stream_last_errors() آبجکتهای StreamError برمیگردونه، با بیش از ۵۰ کد خطای مشخص.
نکات کلیدی:
- تاریخ GA نسخهٔ 8.6: ۱۹ نوامبر ۲۰۲۶؛ فریز ویژگیها ۲۲ سپتامبر و RC 1 دو روز بعدش
- RFC نسخهٔ دوم partial function application با رأی ۳۳ به ۰ قبول شد
- تابع clamp() روی $min > $max خطای ValueError میده
- کلاس Time\Duration با دقت نانوثانیه، final و readonly، و قابل ساخت از رشتهٔ ISO 8601
- سه پیشفرض تازهٔ session برای نصبهای جدید: use_strict_mode روی 1، cookie_httponly روی 1 و cookie_samesite روی Lax
- لاراول کوکی session خودش رو مدیریت میکنه، پس بیشتر اپهای لاراولی از تغییر session تأثیری نمیگیرن




