
فهرست مطالب
- PHP ۸.۶ چه زمانی منتشر میشود؟
- Partial Function Application در PHP ۸.۶ چیست؟
- ترکیب Partial Application با اپراتور Pipe
- تابع clamp در PHP ۸.۶ چه کاری انجام میدهد؟
- ویژگیهای دیگر PHP ۸.۶ کداماند؟
- چه چیزهایی در PHP ۸.۶ منسوخ میشود؟
- آیا باید سایت وردپرسی را به PHP ۸.۶ ارتقا دهیم؟
- محدودیتها: چه چیزهایی درباره PHP ۸.۶ هنوز قطعی نیست؟
- از تجربه تیم siloow
- جمعبندی
- منابع
- سوالات متداول درباره PHP ۸.۶
- PHP ۸.۶ کی منتشر میشود؟
- Partial Function Application در PHP یعنی چه؟
- تابع clamp در PHP چه فرقی با ترکیب min و max دارد؟
- آیا وردپرس از PHP ۸.۶ پشتیبانی میکند؟
- آیا کدهای 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 (دو سال پشتیبانی فعال و دو سال پشتیبانی امنیتی) برای ۸.۶ هم اعمال شود، این نسخه تا اواخر ۲۰۳۰ وصله امنیتی خواهد گرفت؛ تاریخ دقیق پس از انتشار در جدول نسخههای پشتیبانیشده اعلام میشود.
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 و دیگر ویژگیها را بخوانید.

تابع 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 | نمایش بازه زمانی بهصورت یک نوع مقداری |
| IO | API جدید polling | مدیریت همزمان چند جریان ورودی و خروجی |
| JSON | موقعیت خطا در پیام خطای json_decode | پیدا کردن سریعتر JSON خراب |
| URI | Uri\Rfc3986\UriBuilder و Uri\WhatWg\UrlBuilder | ساخت آدرس بهصورت امن، در ادامه افزونه URI نسخه ۸.۵ |
| Standard | اصلاحگرهای endianness برای float در pack() و unpack() | کار با دادههای باینری |
چه چیزهایی در 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().

یک RFC هم به نسخه نرسید: پیشنهاد انتساب ارجاعی در list() با رأی ۲۱ به ۲۱ رد شد، چون تغییرات زبان به اکثریت دوسوم نیاز دارند. این نشان میدهد هر چیزی که در وبلاگها بهعنوان «ویژگی PHP ۸.۶» دیدهاید، لزوماً وارد نسخه نهایی نشده است.
آیا باید سایت وردپرسی را به PHP ۸.۶ ارتقا دهیم؟
برای سایت در حال کار، ارتقا به PHP ۸.۶ در روزهای اول انتشار توصیه نمیشود. وردپرس برای هر نسخه جدید PHP جدول سازگاری خودش را بهروز میکند و تا لحظه نگارش، جدول رسمی سازگاری PHP و وردپرس برای وردپرس ۷.۱ تا PHP ۸.۵ را فهرست کرده است. مسیر پیشنهادی ما:
- اگر سایت روی PHP ۸.۲ یا قدیمیتر است، همین حالا به PHP ۸.۴ یا ۸.۵ بروید؛ پشتیبانی امنیتی ۸.۲ در ۳۱ دسامبر ۲۰۲۶ تمام میشود.
- بعد از انتشار ۸.۶، منتظر اعلام سازگاری در جدول وردپرس و بهروزرسانی افزونههای اصلی بمانید.
- روی یک کپی staging نسخه ۸.۶ را فعال کنید و با
WP_DEBUG_LOGهشدارهای deprecated را جمع کنید. - فقط پس از تمیز شدن لاگ، سایت اصلی را ارتقا دهید.
برای توسعهدهندههایی که افزونه یا قالب توزیع میکنند، الان بهترین زمان است که کد را روی 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 8.6 Release Schedule — PHP Wiki
- RFC: Partial Function Application v2 — PHP Wiki
- RFC: clamp — PHP Wiki
- UPGRADING (PHP-8.6 branch) — php-src on GitHub
سوالات متداول درباره 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


