رفتن به محتوای اصلی

PHP ۸.۵ منتشر شد: اپراتور Pipe و دیگر ویژگی‌ها

  • سینا قربانیان
  • ۱۰ آبان ۱۴۰۵
  • ۱۰ دقیقه مطالعه
  • ۰ بازدید
تصویر شاخص مقاله PHP 8.5 و اپراتور Pipe
فهرست مطالب
  1. PHP ۸.۵ چه زمانی منتشر شد و تا کی پشتیبانی می‌شود؟
  2. اپراتور Pipe در PHP ۸.۵ چیست و چطور کار می‌کند؟
  3. Pipe در پروژه‌های وردپرسی کجا به کار می‌آید؟
  4. array_first و array_last چه مشکلی را حل می‌کنند؟
  5. دیگر ویژگی‌های مهم PHP ۸.۵ کدام‌اند؟
  6. افزونه URI داخلی
  7. Clone With برای کلاس‌های readonly
  8. ویژگی NoDiscard
  9. بهبودهای دیگر
  10. کدام قابلیت‌ها در PHP ۸.۵ منسوخ یا ناسازگار شده‌اند؟
  11. آیا وردپرس با PHP ۸.۵ سازگار است؟
  12. محدودیت‌ها: چه زمانی هنوز به PHP ۸.۵ مهاجرت نکنیم؟
  13. از تجربه تیم siloow
  14. جمع‌بندی
  15. منابع
  16. سوالات متداول درباره PHP ۸.۵
  17. PHP ۸.۵ چه زمانی منتشر شد؟
  18. اپراتور Pipe در PHP چه کاری انجام می‌دهد؟
  19. آیا وردپرس روی PHP ۸.۵ اجرا می‌شود؟
  20. array_first در PHP ۸.۵ با reset چه فرقی دارد؟
  21. از PHP ۸.۲ مستقیم به ۸.۵ بروم یا مرحله‌ای؟

PHP 8.5 نسخه جدید زبان PHP است که در ۲۰ نوامبر ۲۰۲۵ منتشر شد و مهم‌ترین قابلیتش اپراتور Pipe (|>) برای زنجیره کردن توابع از چپ به راست است. در کنار آن، توابع array_first() و array_last()، افزونه داخلی URI، قابلیت «clone with» برای کلاس‌های readonly، ویژگی #[\NoDiscard] و نمایش backtrace در خطاهای fatal هم اضافه شده‌اند.

نویسنده: تیم siloow (سیلو سولوشن) — آخرین به‌روزرسانی: آبان ۱۴۰۵

وضعیت تا آبان ۱۴۰۵: PHP ۸.۵ از ۲۰ نوامبر ۲۰۲۵ نسخه پایدار است؛ پشتیبانی فعال آن تا ۳۱ دسامبر ۲۰۲۷ و پشتیبانی امنیتی تا ۳۱ دسامبر ۲۰۲۹ ادامه دارد. وردپرس ۶.۹، ۷.۰ و ۷.۱ طبق جدول رسمی سازگاری، PHP ۸.۵ را پشتیبانی می‌کنند. PHP ۸.۲ فقط تا ۳۱ دسامبر ۲۰۲۶ وصله امنیتی می‌گیرد.

در این مقاله هر ویژگی را با مثال کد توضیح می‌دهیم، تغییرات ناسازگار و منسوخ‌شده‌ها را فهرست می‌کنیم و بررسی می‌کنیم ارتقای هاست وردپرسی به PHP ۸.۵ چه نکاتی دارد.

PHP ۸.۵ چه زمانی منتشر شد و تا کی پشتیبانی می‌شود؟

PHP ۸.۵ در ۲۰ نوامبر ۲۰۲۵ منتشر شد و طبق جدول نسخه‌های پشتیبانی‌شده php.net، تا پایان ۲۰۲۷ پشتیبانی فعال (رفع باگ و امنیت) و تا پایان ۲۰۲۹ فقط وصله امنیتی دریافت می‌کند. سیاست PHP برای هر شاخه دو سال پشتیبانی فعال و دو سال پشتیبانی امنیتی است.

نسخهتاریخ انتشارپایان پشتیبانی فعالپایان پشتیبانی امنیتی
PHP 8.2۸ دسامبر ۲۰۲۲۳۱ دسامبر ۲۰۲۴۳۱ دسامبر ۲۰۲۶
PHP 8.3۲۳ نوامبر ۲۰۲۳۳۱ دسامبر ۲۰۲۵۳۱ دسامبر ۲۰۲۷
PHP 8.4۲۱ نوامبر ۲۰۲۴۳۱ دسامبر ۲۰۲۶۳۱ دسامبر ۲۰۲۸
PHP 8.5۲۰ نوامبر ۲۰۲۵۳۱ دسامبر ۲۰۲۷۳۱ دسامبر ۲۰۲۹
چرخه پشتیبانی نسخه‌های PHP بر اساس php.net

نتیجه عملی: اگر سایت شما هنوز روی PHP ۸.۲ یا قدیمی‌تر است، از ابتدای ۲۰۲۷ هیچ وصله امنیتی رسمی دریافت نمی‌کند و ارتقا دیگر اختیاری نیست.

اپراتور Pipe در PHP ۸.۵ چیست و چطور کار می‌کند؟

اپراتور Pipe (|>) مقدار سمت چپ را به‌عنوان تنها آرگومان به callable سمت راست می‌دهد و نتیجه را به مرحله بعد می‌فرستد؛ یعنی زنجیره‌ای از توابع را بدون متغیر میانی و از چپ به راست می‌نویسید. این همان مثال رسمی صفحه معرفی PHP ۸.۵ است، کنار معادل قدیمی آن:

<?php
// قبل از PHP 8.5: تودرتو و خواندن از داخل به بیرون
$slug = strtolower(str_replace('.', '', str_replace(' ', '-', trim($title))));

// PHP 8.5: اپراتور Pipe از چپ به راست
$title = ' PHP 8.5 Released ';

$slug = $title
|> trim(...)
|> (fn($str) => str_replace(' ', '-', $str))
|> (fn($str) => str_replace('.', '', $str))
|> strtolower(...);

var_dump($slug); // string(15) "php-85-released"

چند نکته که هنگام استفاده از pipe operator باید بدانید:

  • سمت راست باید یک callable باشد که یک پارامتر اجباری می‌گیرد؛ برای توابع چندپارامتری مثل str_replace باید آن را در یک arrow function بپیچید.
  • سینتکس trim(...) همان «first-class callable» است که از PHP ۸.۱ وجود دارد.
  • arrow function داخل زنجیره باید داخل پرانتز باشد، وگرنه تقدم عملگرها نتیجه را عوض می‌کند.
  • Pipe خوانایی را بهتر می‌کند، اما سرعت اجرا را به‌طور معناداری تغییر نمی‌دهد؛ دلیل استفاده از آن کد تمیزتر است، نه کارایی.
مقایسه کد تودرتو و اپراتور Pipe در PHP 8.5
زنجیره توابع قبل و بعد از Pipe

Pipe در پروژه‌های وردپرسی کجا به کار می‌آید؟

Pipe در پروژه‌های وردپرسی بیشتر جایی مفید است که داده باید از چند مرحله پاک‌سازی و تبدیل عبور کند: آماده‌سازی ورودی فرم با trim، sanitize_text_field و wp_unslash؛ ساخت نامک (slug) از عنوان فارسی؛ یا تبدیل داده API خارجی پیش از ذخیره در متا. در هر سه مورد، ترتیب مراحل همان ترتیبی است که خوانده می‌شود و افزودن یا حذف یک مرحله فقط یک خط را تغییر می‌دهد. البته چون هسته وردپرس و بیشتر افزونه‌ها باید روی PHP ۷.۴ به بعد اجرا شوند، این سینتکس فعلاً مناسب کد اختصاصی پروژه است، نه افزونه‌ای که برای عموم منتشر می‌کنید.

array_first و array_last چه مشکلی را حل می‌کنند؟

توابع array_first() و array_last() اولین و آخرین مقدار یک آرایه را برمی‌گردانند و اگر آرایه خالی باشد null می‌دهند. تا قبل از PHP ۸.۵ برای این کار معمولاً از reset() و end() استفاده می‌شد که اشاره‌گر داخلی آرایه را جابه‌جا می‌کنند و روی آرایه خالی false برمی‌گردانند، یا از array_key_first() (از PHP ۷.۳) و سپس دسترسی به مقدار.

<?php
$orders = ['A-101' => 120000, 'A-102' => 450000, 'A-103' => 98000];

// قبل: reset() و end() که اشاره‌گر داخلی آرایه را جابه‌جا می‌کنند
$first = reset($orders);

// PHP 8.5
$first = array_first($orders); // 120000
$last = array_last($orders); // 98000
$none = array_first([]); // null

این توابع با آرایه‌های انجمنی (کلیددار) هم درست کار می‌کنند و به ترتیب درج عناصر احترام می‌گذارند.

دیگر ویژگی‌های مهم PHP ۸.۵ کدام‌اند؟

علاوه بر Pipe، PHP ۸.۵ چند قابلیت دیگر دارد که در کد روزمره، به‌خصوص در فریم‌ورک‌ها و افزونه‌ها، اثر مستقیم دارند.

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

PHP ۸.۵ یک افزونه داخلی برای تجزیه و نرمال‌سازی آدرس‌ها مطابق استانداردهای RFC ۳۹۸۶ و WHATWG URL اضافه کرده است. این افزونه جایگزین امن‌تری برای parse_url() است که سال‌ها رفتار ناسازگار با استانداردها داشت:

<?php
use Uri\Rfc3986\Uri;

$uri = new Uri('https://php.net/releases/8.5/en.php');

var_dump($uri->getHost());
// string(7) "php.net"

Clone With برای کلاس‌های readonly

حالا clone() می‌تواند یک آرایه از مقادیر جدید بگیرد و ویژگی‌ها را هنگام کپی تغییر دهد؛ الگوی «with-er» برای کلاس‌های readonly بدون کد تکراری پیاده می‌شود:

<?php
readonly class Color
{
public function __construct(
public int $red,
public int $green,
public int $blue,
public int $alpha = 255,
) {}

public function withAlpha(int $alpha): self
{
return clone($this, ['alpha' => $alpha]);
}
}

$blue = new Color(79, 91, 147);
$transparentBlue = $blue->withAlpha(128);

ویژگی NoDiscard

اگر تابعی با #[\NoDiscard] علامت بخورد و مقدار برگشتی آن استفاده نشود، PHP هشدار می‌دهد. برای نادیده گرفتن عمدی، از cast جدید (void) استفاده می‌شود:

<?php
#[\NoDiscard]
function save_order(array $order): bool
{
// ... ذخیره در دیتابیس
return true;
}

save_order($order);
// Warning: نتیجه باید استفاده یا با (void) نادیده گرفته شود

(void) save_order($order); // عمداً نادیده گرفته شد

بهبودهای دیگر

  • خطاهای fatal (مثل عبور از حداکثر زمان اجرا) حالا backtrace دارند و پیدا کردن ریشه مشکل ساده‌تر است.
  • closureهای static و first-class callableها در عبارت‌های ثابت (مثل پارامتر attributeها و مقدار پیش‌فرض) مجازند.
  • تابع curl_share_init_persistent() برای استفاده دوباره از اتصال‌ها و DNS بین درخواست‌ها.
  • #[\Override] روی propertyها و #[\Deprecated] روی traitها و ثابت‌ها.
  • متد Closure::getCurrent() برای بازگشت (recursion) در توابع بی‌نام.
  • متدهای Dom\Element::getElementsByClassName() و insertAdjacentHTML().

کدام قابلیت‌ها در PHP ۸.۵ منسوخ یا ناسازگار شده‌اند؟

PHP ۸.۵ چند قابلیت قدیمی را منسوخ (deprecated) کرده که در کدهای قدیمی وردپرس و افزونه‌ها هنوز دیده می‌شوند. منسوخ شدن یعنی فعلاً هشدار می‌دهد اما در نسخه اصلی بعدی ممکن است حذف شود.

تغییرنوعجایگزین
عملگر backtick به‌جای shell_exec()منسوخفراخوانی صریح shell_exec()
castهای (boolean)، (integer)، (double)، (binary)منسوخ(bool)، (int)، (float)، (string)
null به‌عنوان کلید آرایهمنسوخرشته خالی
پایان دادن case با نقطه‌ویرگولمنسوخدونقطه
__sleep() و __wakeup()منسوخ نرم__serialize() و __unserialize()
تنظیم INI disable_classesحذف‌شدهکنترل در سطح سرور
منسوخ‌شده‌ها و تغییرات ناسازگار PHP ۸.۵ بر اساس php.net

علاوه بر این، تبدیل NAN به انواع دیگر و تبدیل float غیرقابل‌نمایش به int هشدار می‌دهد. فهرست کامل در راهنمای مهاجرت رسمی PHP ۸.۵ آمده است.

نکته: هشدارهای deprecated روی سایت اصلی نباید نمایش داده شوند. display_errors را در production خاموش و log_errors را روشن نگه دارید تا هشدارها فقط در لاگ ثبت شوند.

آیا وردپرس با PHP ۸.۵ سازگار است؟

بله؛ طبق جدول رسمی سازگاری PHP و وردپرس، وردپرس ۶.۹، ۷.۰ و ۷.۱ از PHP ۸.۵ پشتیبانی می‌کنند. تیم هسته در توضیح پشتیبانی PHP در بهار ۲۰۲۶ اعلام کرد برچسب «پشتیبانی بتا» برای نسخه‌های PHP ۸ کنار گذاشته شده، حداقل نسخه پشتیبانی‌شده از وردپرس ۷.۰ برابر PHP ۷.۴ است و حداقل نسخه توصیه‌شده PHP ۸.۳ است.

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

  1. از سایت و دیتابیس نسخه پشتیبان کامل بگیرید.
  2. یک کپی staging بسازید و نسخه PHP آن را در پنل هاست (cPanel یا DirectAdmin) به ۸.۵ تغییر دهید.
  3. WP_DEBUG و WP_DEBUG_LOG را روی staging فعال کنید و صفحات اصلی، فرم‌ها، سبد خرید و پیشخوان را مرور کنید.
  4. فایل debug.log را بررسی کنید و هشدارهای deprecated را به سازنده افزونه گزارش دهید یا اصلاح کنید.
  5. پس از رفع مشکلات، نسخه PHP سایت اصلی را در ساعت کم‌ترافیک تغییر دهید و چند ساعت لاگ را زیر نظر بگیرید.
مراحل ارتقای امن نسخه PHP سایت وردپرسی به PHP 8.5
ارتقای امن PHP در وردپرس

برای چک‌لیست کامل امنیت در کنار ارتقای PHP، مقاله امنیت وردپرس در ۲۰۲۶ را ببینید. اگر هنوز درباره ارتقای خود وردپرس تصمیم نگرفته‌اید، مرور تغییرات وردپرس ۷.۱ هم مفید است.

محدودیت‌ها: چه زمانی هنوز به PHP ۸.۵ مهاجرت نکنیم؟

ارتقا به PHP ۸.۵ برای بیشتر سایت‌های به‌روز بی‌خطر است، اما در این موارد بهتر است صبر کنید یا ابتدا روی PHP ۸.۴ بروید:

  • افزونه یا قالب حیاتی سایت (مثلاً درگاه پرداخت یا افزونه فارسی‌ساز قدیمی) هنوز سازگاری با ۸.۵ را اعلام نکرده است.
  • کد اختصاصی از ویژگی‌های منسوخ مثل backtick یا castهای قدیمی استفاده می‌کند و زمان اصلاح ندارید.
  • هاست شما هنوز افزونه‌های PHP موردنیاز (مثل ionCube برای برخی افزونه‌های رمزگذاری‌شده) را برای ۸.۵ ارائه نکرده است.
  • اگر کد شما باید روی نسخه‌های قدیمی‌تر هم اجرا شود (مثل افزونه‌ای که توزیع می‌کنید)، نمی‌توانید از Pipe و array_first() استفاده کنید مگر حداقل نسخه PHP را بالا ببرید.

از تجربه تیم siloow

تیم siloow علاوه بر قالب‌های وردپرسی، یک سیستم مدیریت محتوای مستقل با PHP توسعه می‌دهد و هر ارتقای نسخه PHP را ابتدا روی همین کدها آزمایش می‌کنیم. تجربه ما این است که در کد مدرن و تایپ‌دار، ارتقا معمولاً بی‌دردسر است و بیشتر هشدارها از کتابخانه‌های قدیمی می‌آیند، نه از کد خودمان. در پروژه‌های وردپرسی، بیشترین مشکل را افزونه‌های قدیمی و قالب‌های خریداری‌شده‌ای ایجاد می‌کنند که سال‌ها به‌روز نشده‌اند. برای کدهای جدید، Pipe را بیشتر در پاک‌سازی ورودی‌ها و ساخت اسلاگ فارسی مفید دیدیم، اما در کد تیمی برای زنجیره‌های طولانی با منطق پیچیده، تابع نام‌دار همچنان خواناتر است.

جمع‌بندی

  • PHP ۸.۵ در ۲۰ نوامبر ۲۰۲۵ منتشر شد و تا پایان ۲۰۲۹ وصله امنیتی می‌گیرد.
  • اپراتور Pipe زنجیره توابع را از چپ به راست و بدون متغیر میانی ممکن می‌کند.
  • array_first()، array_last()، افزونه URI، clone with و #[\NoDiscard] از مهم‌ترین افزوده‌ها هستند.
  • وردپرس ۶.۹ به بعد با PHP ۸.۵ سازگار است؛ حداقل نسخه توصیه‌شده PHP ۸.۳ است.
  • پیش از ارتقا روی staging با WP_DEBUG_LOG تست کنید و هشدارهای deprecated را بررسی کنید.

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

منابع

سوالات متداول درباره PHP ۸.۵

PHP ۸.۵ چه زمانی منتشر شد؟

PHP ۸.۵ در ۲۰ نوامبر ۲۰۲۵ منتشر شد. طبق php.net پشتیبانی فعال آن تا ۳۱ دسامبر ۲۰۲۷ و پشتیبانی امنیتی تا ۳۱ دسامبر ۲۰۲۹ ادامه دارد.

اپراتور Pipe در PHP چه کاری انجام می‌دهد؟

اپراتور Pipe با علامت |> مقدار سمت چپ را به callable سمت راست می‌دهد و نتیجه را به مرحله بعد منتقل می‌کند. به این ترتیب زنجیره‌ای از توابع را از چپ به راست و بدون متغیر میانی می‌نویسید.

آیا وردپرس روی PHP ۸.۵ اجرا می‌شود؟

بله. طبق جدول رسمی سازگاری، وردپرس ۶.۹، ۷.۰ و ۷.۱ از PHP ۸.۵ پشتیبانی می‌کنند. با این حال سازگاری قالب و افزونه‌ها را باید جداگانه روی staging تست کنید.

array_first در PHP ۸.۵ با reset چه فرقی دارد؟

array_first مقدار اول آرایه را بدون جابه‌جا کردن اشاره‌گر داخلی آرایه برمی‌گرداند و برای آرایه خالی null می‌دهد. reset اشاره‌گر را تغییر می‌دهد و برای آرایه خالی false برمی‌گرداند.

از PHP ۸.۲ مستقیم به ۸.۵ بروم یا مرحله‌ای؟

می‌توانید مستقیم ارتقا دهید، به شرطی که روی staging همه هشدارها و خطاهای نسخه‌های ۸.۳، ۸.۴ و ۸.۵ را بررسی کنید. اگر افزونه حیاتی هنوز با ۸.۵ سازگار نیست، PHP ۸.۴ گزینه میانی امنی است.

منبع: www.php.net

اشتراک‌گذاری