أخبار التقنية التقنية بلغة عربية واضحة
تحديث تقني Laravel وPHP

ما الجديد في PHP 8.6

من المقرر إصدار PHP 8.6 في 19 نوفمبر 2026. يجلب الإصدار تطبيقاً جزئياً للدوال عبر placeholders، ودالة clamp()، وفئة Time\Duration بدقة nanosecond، إلى جانب تحسينات تستهدف بناء event loops والتعامل مع streams وخصائص readonly.

المصدر: Laravel News
ما الجديد في PHP 8.6
Laravel

أبرز النقاط

  • موعد الإصدار النهائي المخطط لـ PHP 8.6 هو 19 نوفمبر 2026، مع تجميد الميزات في 22 سبتمبر.
  • Partial Function Application تسمح بإنشاء Closure عبر تمرير جزء من معاملات دالة واستخدام `?` للمعاملات المؤجلة.
  • الدالة `clamp()` تحصر القيم ضمن حد أدنى وأقصى وتدعم الأنواع القابلة للمقارنة.
  • الفئة `Time\Duration` تمثل المدد الزمنية بدقة nanosecond وتدعم الإنشاء والحساب والمقارنة.
  • واجهة `Io\Poll` تقدم abstraction موحداً لآليات polling، بينما تضيف streams خيارات أخطاء منظمة.
  • يمكن لخصائص `readonly` امتلاك قيم افتراضية، كما يمكن كتابة DocComments مباشرة على معاملات الدوال.

من المقرر أن يصل PHP 8.6 في 19 نوفمبر 2026، وهو حالياً في مرحلة Beta. يركز الإصدار على إضافات صغيرة وعملية في لغة PHP، إلى جانب واجهات جديدة قد تهم مطوري الأدوات منخفضة المستوى وasync runtimes.

من المحطات المعلنة قبل الإصدار النهائي: تجميد الميزات في 22 سبتمبر، ثم أول Release Candidate في 24 سبتمبر.

تطبيق جزئي للدوال

تضيف PHP 8.6 مفهوم Partial Function Application (PFA): يمكن تمرير بعض معاملات الدالة الآن والحصول على Closure يستقبل المعاملات المتبقية لاحقاً. تستخدم الميزة الرمز ? لمعامل واحد يُملأ لاحقاً، و... للمعاملات المتبقية.

$makeSlug = str_replace(' ', '-', ?);
$makeSlug('Hello World'); // Hello-World

$titles = array_map(strtolower(?), $titles);

الـ Closure الناتج يحتفظ بأسماء المعاملات وأنواعها وقيمها الافتراضية من الدالة الأصلية. أما المعاملات التي تمرر عند إنشاء التطبيق الجزئي فتُقيَّم في تلك اللحظة، لا عند استدعاء الـ Closure. وكل placeholder من نوع ? يصبح معاملاً مطلوباً في الـ Closure الناتج، حتى لو كان المعامل المقابل اختيارياً في الدالة الأصلية.

clamp() وTime\Duration

تضيف اللغة الدالة clamp() لحصر قيمة ضمن حدين:

clamp(101, min: 0, max: 100); // 100
clamp(-1, min: 0, max: 100);  // 0

تعمل الدالة مع الأنواع القابلة للمقارنة، بما فيها strings وكائنات DateTime. وإذا كانت قيمة min أكبر من max، ترمي ValueError. وهي بديل أوضح للنمط المتكرر min(max(...)).

كذلك يقدم الإصدار Time\Duration، وهي فئة final readonly لتمثيل مدة زمنية بأسلوب stopwatch وبدقة nanosecond. توفر الفئة methods لإنشاء المدد بوحدات مختلفة، وإجراء العمليات الحسابية والمقارنات بينها:

use Time\Duration;

$oneSecond = Duration::fromSeconds(1);
$halfSecond = $oneSecond->divideBy(2);
$total = $oneSecond->add($halfSecond);

يمكن أيضاً إنشاء مدة من سلسلة ISO 8601. الهدف منها توفير نوع مشترك يمكن أن تستقبله وظائف PHP وواجهة polling الجديدة، بدلاً من الاعتماد على أعداد صحيحة أو عشرية منفصلة لتمثيل الزمن.

readonly وDocComments أقرب إلى الكود

بات بإمكان خصائص readonly امتلاك قيمة افتراضية في PHP 8.6، مع بقاء قاعدة عدم إعادة إسناد الخاصية بعد تهيئتها كما هي. يفيد ذلك، مثلاً، في تنفيذ خصائص get-only في interfaces بقيمة ثابتة.

كما يمكن وضع DocComment مباشرة على معامل الدالة، ويمكن الوصول إليه عبر ReflectionParameter::getDocComment():

function search(
    /** كلمات البحث في قاعدة البيانات */ string $query,
    /** الحد الأقصى للنتائج */ int $limit = 10,
): array {
    // ...
}

هذا يمنح IDEs وأدوات التحليل الساكن طريقة لقراءة وصف المعامل دون تكرار اسمه ضمن @param أعلى الدالة.

واجهة موحدة لـ polling وتحسين streams

يضيف namespace جديداً باسم Io\Poll لتوفير واجهة موحدة لآليات polling في أنظمة التشغيل، مثل epoll على Linux وkqueue على BSD وmacOS وWSAPoll على Windows. تستهدف الواجهة تحسينات داخل PHP، مثل معالجة الإشارات وFPM، مع اعتبار frameworks الخاصة بـ async في userland جمهوراً ثانوياً لها.

وتحصل streams على نموذج موحد للأخطاء. يحدد خيار السياق error_mode ما إذا كانت الأخطاء تظهر كتحذيرات أو exceptions أو تُخفى، بينما تعيد stream_last_errors() كائنات StreamError منظمة للعملية الأخيرة.

تشمل الإضافات الأخرى enum عالمياً باسم SortDirection بحالتي Ascending وDescending، وإتاحة __debugInfo() داخل enums لتخصيص مخرجات var_dump()، وتحسينات لاحقة على URI extension، مثل builder classes لإنشاء URIs.

بالنسبة لتطبيقات Laravel المعتادة، ستكون clamp() وPartial Function Application وتحسينات readonly وDocComments من الإضافات الأقرب للاستخدام اليومي. أما Io\Poll وواجهة أخطاء streams فتبدو أكثر ارتباطاً بمن يبني خوادم أو مكتبات async أو أدوات بنية تحتية بلغة PHP.

لماذا يهم؟

الإصدار يزيل أنماطاً متكررة من كود PHP اليومي، مثل حصر القيم يدوياً وتمثيل المدد بأرقام غير موحدة، ويضيف أدوات لغوية أوضح للتعامل مع callbacks وmetadata. وفي المقابل، تفتح واجهات polling وأخطاء streams خيارات أكثر تنظيماً للمكتبات التي تعمل مع I/O وevent loops.

#PHP#PHP86#Laravel#PHPDevelopment#BackendDevelopment