چی تو PHP 8.5 جدیده؟ از pipe operator تا clone جدید
خلاصهٔ کاملتر
طبق مقالهٔ Scott Keck-Warren تو php[architect]، نسخهٔ PHP 8.5 الان تو مرحلهٔ release candidate هست و قرار شده ۲۰ نوامبر ۲۰۲۵ منتشر بشه. نویسنده تأکید میکنه که هنوز نباید رو production نصبش کنید و خودش صبر میکنه تا اولین patch یعنی 8.5.1 بیاد. مثالهاش رو هم با beta 3 روی ایمیج رسمی Docker تست کرده، پس ممکنه تا نسخهٔ نهایی چیزایی عوض بشه.
مهمترین قابلیت، pipe operator یعنی |> هست. این عملگر خروجی سمت چپ رو بهعنوان ورودی به callable سمت راست میده، پس دیگه لازم نیست هی یه متغیر رو بازنویسی کنی:
$result = [" scott", "@", "podplanner.online "]
|> implode(...)
|> strtolower(...)
|> trim(...);طبق RFC، این کار کاملاً تو سطح کامپایلر انجام میشه و تقریباً هیچ هزینهٔ runtime نداره. محدودیتش اینه که فقط callableهایی کار میکنن که یه پارامتر اجباری دارن و پارامترشون by reference نیست. نویسنده امیدواره ابزاری مثل Rector بتونه این الگو رو خودکار تو کد پیدا و جایگزین کنه.
قابلیت بعدی attribute جدید #[\NoDiscard] هست. اگه یه تابع رو باهاش علامت بزنی و یادت بره خروجیش رو جایی ذخیره کنی، PHP یه warning میده. برای وقتایی که عمداً میخوای خروجی رو نادیده بگیری، باید با (void) کستش کنی. نویسنده اینو برای باگهایی مفید میدونه که آدم با اینکه بهتر میدونه، باز تکرارشون میکنه؛ مثلاً صدا زدن یه تابع گرون مثل محاسبهٔ مالیات از یه سرویس بیرونی بدون استفاده از جوابش.
clone() هم حالا یه پارامتر دوم میگیره که فیلدهایی که میخوای عوض بشن رو مشخص میکنه. این برای value objectهای readonly (یعنی کلاسهایی که بعد از ساخته شدن دیگه تغییر نمیکنن) خیلی کاربردیه، چون دیگه لازم نیست موقع تغییر یه فیلد، همهٔ فیلدهای دیگه رو دستی کپی کنی:
public function setFirst(string $newFirst): FullName
{
return clone($this, [
"first" => $newFirst
]);
}بقیهٔ تغییرات: توابع array_first() و array_last() که اولین و آخرین مقدار آرایه رو برمیگردونن و برای آرایهٔ خالی null میدن. فلگ php --ini=diff فقط تنظیماتی از php.ini رو نشون میده که با پیشفرض فرق دارن و برای جابهجایی سرور خیلی به درد میخوره. خطاهای fatal مثل تموم شدن زمان اجرا حالا stack trace دارن. ثابت PHP_BUILD_DATE اضافه شده، #[\Deprecated] روی traitها و #[\Override] روی propertyها کار میکنه، و OPcache دیگه اختیاری نیست و همیشه داخل PHP کامپایل میشه. یه سری deprecation هم هست، از جمله استفاده از backtick برای اجرای دستورات کنسول.
نکات کلیدی:
- تاریخ انتشار PHP 8.5: ۲۰ نوامبر ۲۰۲۵؛ نویسنده پیشنهاد میکنه تا 8.5.1 رو production نصبش نکنید.
- pipe operator (|>) فقط با callableهای تکپارامتری و بدون by-reference کار میکنه و سربار runtime تقریباً صفره.
- #[\NoDiscard] اگه خروجی تابع استفاده نشه warning میده؛ با کست (void) میشه عمداً نادیدهش گرفت.
- clone($obj, [...]) اجازه میده یه شیء readonly رو با تغییر چندتا فیلد کپی کنی.
- array_first() و array_last() اضافه شدن و برای آرایهٔ خالی null برمیگردونن.
- php --ini=diff فقط تنظیمات غیرپیشفرض php.ini رو لیست میکنه.
- OPcache حالا همیشه داخل PHP کامپایل میشه و دیگه اکستنشن اختیاری نیست.




