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

PHP ۸.۶ در راه است؛ Partial Application و clamp

  • سینا قربانیان
  • ۱۱ آبان ۱۴۰۵
  • ۱۰ دقیقه مطالعه
  • ۰ بازدید
تصویر شاخص مقاله PHP 8.6 و ویژگی‌های جدید آن
فهرست مطالب
  1. PHP ۸.۶ چه زمانی منتشر می‌شود؟
  2. Partial Function Application در PHP ۸.۶ چیست؟
  3. ترکیب Partial Application با اپراتور Pipe
  4. تابع clamp در PHP ۸.۶ چه کاری انجام می‌دهد؟
  5. ویژگی‌های دیگر PHP ۸.۶ کدام‌اند؟
  6. چه چیزهایی در PHP ۸.۶ منسوخ می‌شود؟
  7. آیا باید سایت وردپرسی را به PHP ۸.۶ ارتقا دهیم؟
  8. محدودیت‌ها: چه چیزهایی درباره PHP ۸.۶ هنوز قطعی نیست؟
  9. از تجربه تیم siloow
  10. جمع‌بندی
  11. منابع
  12. سوالات متداول درباره PHP ۸.۶
  13. PHP ۸.۶ کی منتشر می‌شود؟
  14. Partial Function Application در PHP یعنی چه؟
  15. تابع clamp در PHP چه فرقی با ترکیب min و max دارد؟
  16. آیا وردپرس از PHP ۸.۶ پشتیبانی می‌کند؟
  17. آیا کدهای PHP ۸.۵ روی PHP ۸.۶ بدون تغییر اجرا می‌شوند؟

PHP 8.6 نسخه بعدی زبان PHP است که انتشار پایدار آن طبق برنامه رسمی برای ۱۹ نوامبر ۲۰۲۶ (۲۸ آبان ۱۴۰۵) هدف‌گذاری شده و دو قابلیت شاخص آن «اعمال جزئی تابع» (Partial Function Application) با جای‌خالی ? و تابع داخلی clamp() برای محدود کردن یک مقدار بین حداقل و حداکثر است. تا زمان نگارش، PHP ۸.۶ در مرحله Release Candidate قرار دارد و فهرست ویژگی‌هایش قفل شده است.

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

وضعیت تا آبان ۱۴۰۵ (برنامه‌ریزی‌شده): طبق جدول زمانی رسمی در wiki.php.net، فریز نرم ویژگی‌ها با Beta ۱ در ۱۳ اوت ۲۰۲۶، فریز سخت در ۲۲ سپتامبر، RC4 در ۲۱ اکتبر و RC5 در ۵ نوامبر ۲۰۲۶ است و انتشار عمومی (GA) برای ۱۹ نوامبر ۲۰۲۶ هدف‌گذاری شده. این تاریخ‌ها ممکن است تغییر کنند؛ اگر این مقاله را بعد از آن تاریخ می‌خوانید، صفحه رسمی انتشار در php.net را بررسی کنید.

در این مقاله ویژگی‌های PHP ۸.۶ را بر اساس RFCهای پذیرفته‌شده و فایل UPGRADING مخزن رسمی PHP مرور می‌کنیم، با مثال کد نشان می‌دهیم Partial Application و clamp چطور کار می‌کنند و توضیح می‌دهیم صاحبان سایت‌های وردپرسی کی و چطور باید به فکر ارتقا باشند.

PHP ۸.۶ چه زمانی منتشر می‌شود؟

انتشار پایدار PHP ۸.۶ برای ۱۹ نوامبر ۲۰۲۶ برنامه‌ریزی شده است. صفحه برنامه انتشار PHP ۸.۶ هدف را «GA در اواخر نوامبر» اعلام کرده و مدیران انتشار این نسخه Daniel Scherzer، Matteo Beccati و Joe Ferguson هستند.

تاریخمرحلهمعنی برای توسعه‌دهنده
۲ ژوئیه تا ۳۰ ژوئیه ۲۰۲۶Alpha ۱ تا Alpha ۳ویژگی‌ها هنوز در حال ادغام
۱۳ اوت ۲۰۲۶Beta ۱ و فریز نرم ویژگی‌هاRFC جدیدی وارد این نسخه نمی‌شود
۲۲ سپتامبر ۲۰۲۶فریز سختفقط رفع باگ پذیرفته می‌شود
۲۴ سپتامبر تا ۵ نوامبر ۲۰۲۶RC2 تا RC5زمان مناسب تست کد و افزونه‌ها
۱۹ نوامبر ۲۰۲۶GA (برنامه‌ریزی‌شده)نسخه پایدار
برنامه انتشار PHP ۸.۶ بر اساس wiki.php.net (تاریخ‌ها قابل تغییر)

اگر سیاست معمول PHP (دو سال پشتیبانی فعال و دو سال پشتیبانی امنیتی) برای ۸.۶ هم اعمال شود، این نسخه تا اواخر ۲۰۳۰ وصله امنیتی خواهد گرفت؛ تاریخ دقیق پس از انتشار در جدول نسخه‌های پشتیبانی‌شده اعلام می‌شود.

Partial Function Application در PHP ۸.۶ چیست؟

Partial Function Application یعنی فراخوانی یک تابع با بخشی از آرگومان‌ها و گذاشتن جای‌خالی برای بقیه؛ PHP به جای اجرای تابع، یک closure جدید برمی‌گرداند که آرگومان‌های باقی‌مانده را می‌گیرد. طبق RFC نسخه دوم Partial Function Application که با رأی ۳۳ به ۰ پذیرفته و در PHP ۸.۶ alpha3 ادغام شد، دو نوع جای‌خالی وجود دارد:

  • ? یعنی دقیقاً یک آرگومان در این جایگاه بعداً داده می‌شود.
  • ... یعنی صفر یا چند آرگومان در این جایگاه بعداً داده می‌شود.
<?php
function add(int $a, int $b): int
{
return $a + $b;
}

// ? یعنی «دقیقاً یک آرگومان بعداً در این جایگاه می‌آید»
$addToTen = add(10, ?);
echo $addToTen(5); // 15

// ... یعنی «بقیه آرگومان‌ها را بعداً بده»
$f = foo(1, ...);

این قابلیت قبلاً با نوشتن یک arrow function قابل شبیه‌سازی بود، اما Partial Application کوتاه‌تر است، نوع و نام پارامترها را از تابع اصلی حفظ می‌کند و خطای تعداد آرگومان را زودتر نشان می‌دهد.

ترکیب Partial Application با اپراتور Pipe

بزرگ‌ترین برنده این ویژگی، اپراتور Pipe است که در PHP ۸.۵ اضافه شد. در ۸.۵ هر تابع چندپارامتری داخل زنجیره pipe باید در یک arrow function پیچیده می‌شد؛ در ۸.۶ کافی است جای ورودی را با ? مشخص کنید. RFC همچنین توضیح می‌دهد که وقتی فراخوانی جزئی تک‌آرگومانی مستقیماً سمت راست pipe باشد، کامپایلر می‌تواند آن را بهینه کند و closure واقعی نسازد.

<?php
// PHP 8.5: برای pipe باید arrow function بنویسید
$slug = $title
|> trim(...)
|> (fn($s) => str_replace(' ', '-', $s))
|> strtolower(...);

// PHP 8.6 (برنامه‌ریزی‌شده): با جای‌خالی ? کوتاه‌تر می‌شود
$slug = $title
|> trim(...)
|> str_replace(' ', '-', ?)
|> strtolower(...);

اگر با اپراتور Pipe آشنا نیستید، ابتدا مقاله PHP ۸.۵ منتشر شد: اپراتور Pipe و دیگر ویژگی‌ها را بخوانید.

مقایسه کد arrow function و Partial Application در PHP 8.6
pipe کوتاه‌تر با جای‌خالی ?

تابع clamp در PHP ۸.۶ چه کاری انجام می‌دهد؟

تابع clamp() یک مقدار را بین حداقل و حداکثر محدود می‌کند: اگر مقدار داخل بازه باشد همان را برمی‌گرداند و اگر بیرون باشد، نزدیک‌ترین مرز را. طبق RFC تابع clamp (پذیرفته‌شده با ۲۳ رأی موافق در برابر ۳ مخالف)، رفتار آن معادل max($min, min($max, $value)) است، با این تفاوت که ورودی نامعتبر را صریحاً رد می‌کند.

<?php
// امضای تابع طبق RFC
// clamp(mixed $value, mixed $min, mixed $max): mixed

clamp(2, min: 1, max: 3); // 2
clamp(0, min: 1, max: 3); // 1
clamp(6, min: 1, max: 3); // 3
clamp("d", "c", "g"); // "d"

// محدود کردن تعداد آیتم در هر صفحه
$perPage = clamp((int) ($_GET['per_page'] ?? 10), 1, 100);

clamp(4, 8, 6); // ValueError: min must be <= max

قواعد مهم clamp:

  • مرزها شامل می‌شوند؛ یعنی clamp(3, 1, 3) همان ۳ را برمی‌گرداند.
  • اگر $min بزرگ‌تر از $max باشد، یا یکی از مرزها NAN باشد، ValueError پرتاب می‌شود.
  • اگر خود مقدار NAN باشد، همان NAN برگردانده می‌شود.
  • مقایسه با قواعد معمول PHP انجام می‌شود، بنابراین روی رشته‌ها هم کار می‌کند؛ ولی برای خوانایی بهتر است فقط با عدد از آن استفاده کنید.

نکته: clamp جایگزین اعتبارسنجی ورودی نیست. مقدار per_page را باید اول به عدد صحیح تبدیل و پاک‌سازی کنید و بعد با clamp محدود کنید.

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

ویژگی‌های PHP ۸.۶ فقط به Partial Application و clamp محدود نمی‌شود. فایل UPGRADING شاخه PHP-۸.۶ در مخزن رسمی، این موارد را هم در بخش ویژگی‌های جدید فهرست کرده است:

بخشویژگی جدیدکاربرد
هسته زبانمقدار پیش‌فرض برای propertyهای readonlyکلاس‌های تغییرناپذیر با کد کمتر
هسته زبان#[\Override] روی ثابت‌های کلاس و __debugInfo() روی enumکنترل دقیق‌تر هنگام ارث‌بری و دیباگ
Dateکلاس Time\Durationنمایش بازه زمانی به‌صورت یک نوع مقداری
IOAPI جدید pollingمدیریت هم‌زمان چند جریان ورودی و خروجی
JSONموقعیت خطا در پیام خطای json_decodeپیدا کردن سریع‌تر JSON خراب
URIUri\Rfc3986\UriBuilder و Uri\WhatWg\UrlBuilderساخت آدرس به‌صورت امن، در ادامه افزونه URI نسخه ۸.۵
Standardاصلاح‌گرهای endianness برای float در pack() و unpack()کار با داده‌های باینری
ویژگی‌های جدید PHP ۸.۶ بر اساس فایل UPGRADING مخزن php-src

چه چیزهایی در PHP ۸.۶ منسوخ می‌شود؟

چند تابع و الگوی قدیمی در PHP ۸.۶ منسوخ (deprecated) شده‌اند که ممکن است در کدهای قدیمی وردپرسی دیده شوند:

  • توابع نام مستعار is_double()، is_long()، is_integer() و doubleval()؛ به جای آن‌ها is_float()، is_int() و floatval() را به کار ببرید.
  • تابع metaphone() و strcoll().
  • استفاده از return داخل بلوک finally و برگرداندن مقدار از __construct() و __destruct().
  • آرگومان سوم define() و استفاده از namespace به‌عنوان نام ثابت کلاس.
  • پاس دادن شیء به http_build_query().
فهرست ویژگی‌های PHP 8.6 بر اساس RFCهای پذیرفته‌شده
ویژگی‌های اصلی PHP ۸.۶

یک RFC هم به نسخه نرسید: پیشنهاد انتساب ارجاعی در list() با رأی ۲۱ به ۲۱ رد شد، چون تغییرات زبان به اکثریت دوسوم نیاز دارند. این نشان می‌دهد هر چیزی که در وبلاگ‌ها به‌عنوان «ویژگی PHP ۸.۶» دیده‌اید، لزوماً وارد نسخه نهایی نشده است.

آیا باید سایت وردپرسی را به PHP ۸.۶ ارتقا دهیم؟

برای سایت در حال کار، ارتقا به PHP ۸.۶ در روزهای اول انتشار توصیه نمی‌شود. وردپرس برای هر نسخه جدید PHP جدول سازگاری خودش را به‌روز می‌کند و تا لحظه نگارش، جدول رسمی سازگاری PHP و وردپرس برای وردپرس ۷.۱ تا PHP ۸.۵ را فهرست کرده است. مسیر پیشنهادی ما:

  1. اگر سایت روی PHP ۸.۲ یا قدیمی‌تر است، همین حالا به PHP ۸.۴ یا ۸.۵ بروید؛ پشتیبانی امنیتی ۸.۲ در ۳۱ دسامبر ۲۰۲۶ تمام می‌شود.
  2. بعد از انتشار ۸.۶، منتظر اعلام سازگاری در جدول وردپرس و به‌روزرسانی افزونه‌های اصلی بمانید.
  3. روی یک کپی staging نسخه ۸.۶ را فعال کنید و با WP_DEBUG_LOG هشدارهای deprecated را جمع کنید.
  4. فقط پس از تمیز شدن لاگ، سایت اصلی را ارتقا دهید.

برای توسعه‌دهنده‌هایی که افزونه یا قالب توزیع می‌کنند، الان بهترین زمان است که کد را روی RCهای ۸.۶ تست کنند تا روز انتشار غافلگیر نشوند. یادتان باشد که از وردپرس ۷.۰ حداقل نسخه پشتیبانی‌شده PHP ۷.۴ است و حداقل نسخه توصیه‌شده PHP ۸.۳؛ بنابراین فاصله زیادی بین «حداقل قابل اجرا» و «نسخه‌ای که باید داشته باشید» وجود دارد. نکات امنیتی هم‌زمان با ارتقا را در چک‌لیست امنیت وردپرس آورده‌ایم.

محدودیت‌ها: چه چیزهایی درباره PHP ۸.۶ هنوز قطعی نیست؟

  • تاریخ ۱۹ نوامبر ۲۰۲۶ هدف‌گذاری است و طبق خود صفحه برنامه انتشار ممکن است جابه‌جا شود.
  • جزئیات رفتاری ممکن است در RCها با رفع باگ تغییر کند؛ ملاک نهایی، مستندات php.net پس از انتشار است.
  • سازگاری رسمی وردپرس، هاست‌ها و افزونه‌هایی مثل ionCube با PHP ۸.۶ معمولاً چند هفته تا چند ماه پس از انتشار اعلام می‌شود.
  • کدی که از Partial Application یا clamp استفاده کند، روی نسخه‌های قدیمی‌تر PHP اجرا نمی‌شود؛ برای کد توزیع‌شده باید حداقل نسخه را بالا ببرید.

از تجربه تیم siloow

تیم siloow سیستم مدیریت محتوای مستقل خود را با PHP توسعه می‌دهد و معمولاً نسخه‌های RC را در محیط توسعه اجرا می‌کنیم تا هشدارهای deprecated را قبل از انتشار پایدار ببینیم. تجربه ما این است که ارتقاهای سالانه PHP در کد تمیز و دارای تست، کار چند ساعته است؛ اما در سایت‌های وردپرسی با ده‌ها افزونه، زمان واقعی صرف پیدا کردن افزونه‌ای می‌شود که هنوز از توابع منسوخ استفاده می‌کند. برای قابلیت‌های جدید، clamp را در جاهایی مثل محدود کردن تعداد آیتم صفحه‌بندی و مقادیر تنظیمات کاربر بلافاصله کاربردی می‌دانیم، و Partial Application را بیشتر در کنار pipe برای پاک‌سازی داده‌های فرم.

جمع‌بندی

  • PHP ۸.۶ برای ۱۹ نوامبر ۲۰۲۶ برنامه‌ریزی شده و فهرست ویژگی‌هایش از ۲۲ سپتامبر قفل شده است.
  • Partial Function Application با ? و ... یک closure از فراخوانی ناقص تابع می‌سازد و pipe را کوتاه‌تر می‌کند.
  • clamp() مقدار را بین حداقل و حداکثر محدود می‌کند و برای مرز نامعتبر ValueError می‌دهد.
  • readonly با مقدار پیش‌فرض، Time\Duration، API polling و UriBuilder از دیگر افزوده‌ها هستند.
  • برای سایت‌های وردپرسی، ابتدا از PHP ۸.۲ مهاجرت کنید و برای ۸.۶ منتظر اعلام سازگاری بمانید.

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

منابع

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

PHP ۸.۶ کی منتشر می‌شود؟

طبق برنامه رسمی در wiki.php.net، انتشار پایدار PHP ۸.۶ برای ۱۹ نوامبر ۲۰۲۶ هدف‌گذاری شده است. این تاریخ برنامه‌ریزی‌شده است و ممکن است تغییر کند.

Partial Function Application در PHP یعنی چه؟

یعنی فراخوانی تابع با بخشی از آرگومان‌ها و گذاشتن جای‌خالی ? یا … برای بقیه. PHP به جای اجرای تابع یک closure برمی‌گرداند که آرگومان‌های باقی‌مانده را می‌گیرد.

تابع clamp در PHP چه فرقی با ترکیب min و max دارد؟

نتیجه clamp معادل max(min, min(max, value)) است، اما خواناتر است و اگر حداقل بزرگ‌تر از حداکثر یا یکی از مرزها NAN باشد، ValueError پرتاب می‌کند. ترکیب min و max چنین خطایی را تشخیص نمی‌دهد.

آیا وردپرس از PHP ۸.۶ پشتیبانی می‌کند؟

تا زمان نگارش، جدول رسمی سازگاری وردپرس برای نسخه ۷.۱ تا PHP ۸.۵ را فهرست کرده است. پس از انتشار PHP ۸.۶ باید منتظر به‌روزرسانی این جدول و افزونه‌های اصلی ماند.

آیا کدهای PHP ۸.۵ روی PHP ۸.۶ بدون تغییر اجرا می‌شوند؟

در بیشتر موارد بله، اما برخی توابع مثل is_double، is_long و metaphone منسوخ شده‌اند و هشدار می‌دهند. قبل از ارتقا کد را روی staging با لاگ فعال تست کنید.

منبع: wiki.php.net

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