تم إصدار PHP 8.4: ما الذي تغير ولماذا هو مهم
استقبل مجتمع المطورين الإصدار المنتظر PHP 8.4 — النسخة الرئيسية الجديدة من واحدة من أشهر لغات برمجة الويب. يجلب التحديث مجموعة من التحسينات الهامة، بما في ذلك خطافات الخصائص (property hooks) المنتظرة، والرؤية غير المتماثلة، وتحسين كبير في الأداء. دعنا نستعرض التغييرات الرئيسية التي يجب أن يعرفها كل مطور PHP.
1. خطافات الخصائص (Property Hooks)
أبرز ميزة جديدة هي إمكانية تعريف الدوال الحاصلة (getters) والدوال الضابطة (setters) مباشرةً في تعريف خاصية الفئة دون كتابة دوال منفصلة. هذا يبسط بشكل جذري العمل مع الحقول المحسوبة أو التي تحتاج إلى التحقق من صحتها.
class User{ public string $name { set => $this->name = trim($value); get => ucfirst($this->name); }}سابقًا، لمثل هذا المنطق كان يجب كتابة دوال منفصلة مثل getName() و setName(). تجعل خطافات الخصائص الكود أنظف وأكثر قابلية للقراءة.
2. الرؤية غير المتماثلة
الآن يمكن تعيين مستويات وصول مختلفة للقراءة والكتابة للخاصية. على سبيل المثال، قراءة عامة ولكن كتابة محمية:
class Post{ public private(set) string $title;}هذا يلغي الحاجة إلى إنشاء دوال حاصلة وضابطة فقط من أجل التحكم في الوصول، مع الحفاظ على التغليف (encapsulation).
3. JIT محسّن والأداء
في PHP 8.4، تمت إعادة هيكلة مُجمّع JIT (Just-In-Time) بشكل كبير. قام مطورو النواة بتحسين خوارزميات اتخاذ القرارات المتعلقة بالتجميع وتقليل النفقات العامة عند تنفيذ مسارات الكود الساخنة. وفقًا للاختبارات الأولية، تتراوح زيادة الأداء في المعايير الاصطناعية من 10% إلى 25% مقارنة بـ PHP 8.3.
- تسريع عمل الحلقات والدوال التكرارية
- معالجة محسّنة للمصفوفات الكبيرة
- تقليل استهلاك الذاكرة في وضع JIT بنسبة تصل إلى 15%
4. بناء جملة جديد: تفكيك المصفوفات مع الأنواع
تمت إضافة إمكانية تحديد الأنواع عند تفكيك المصفوفات:
[$name, $age] = ['إيفان', 30]; // كان[ string $name, int $age ] = ['إيفان', 30]; // أصبحهذا يعزز التحليل الثابت ويجعل الكود موثقًا ذاتيًا.
5. تغييرات في المكتبة القياسية
- دوال جديدة:
array_find()،array_find_key()،array_any()وarray_all()— للعمل بشكل أكثر إيجازًا مع المصفوفات. - تحديث PCRE2: تم تحديث مكتبة التعبيرات النمطية إلى الإصدار 10.44، مما يصلح عددًا من الأخطاء النادرة.
- دوال مهملة: تم إعلان
session_set_cookie_params()(لصالحini_set()) وعدة دوال داخلية كدوال مهملة.
6. حالة الإهمال (Deprecations)
في PHP 8.4، تم وضع علامة إهمال على:
- تغيير نوع القيمة المُرجعة عبر
#[\\ReturnTypeWillChange]— الآن مطلوب إعلان صريح. - استدعاء
isset()على غير المصفوفات (على سبيل المثال