كيفية تجهيز موقع WordPress الخاص بك لـ PHP 8

نشرت: 2022-07-06

تتطلب مواقع WordPress لغة PHP ، ومع تطور PHP ، استمر WordPress في ذلك. في الآونة الأخيرة ، كان PHP 7.4 هو الإصدار الافتراضي من PHP على منصة WordPress VIP. ومع ذلك ، نظرًا لانتهاء دعم PHP 7.4 للأمان في نوفمبر 2022 ، ستحتاج مواقع WordPress إلى الترقية للحفاظ على أمان قوي. لهذا السبب ، ستقوم منصة WordPress VIP بنقل جميع تطبيقات عملائنا للعمل على PHP 8.0.

ما يلي هو وصف للتغييرات ، والخطوات التي يمكن لعملائنا والآخرين الذين يستخدمون WordPress على منصات أخرى القيام بها للتحضير.

جدول المحتويات

  • قصة PHP 8.0
    • ميزات جديدة
    • انتشار الدعم عبر مجتمعات PHP و WordPress
  • كيفية البحث عن مشكلات توافق PHP 8.0
    • استخدم PHP_CodeSniffer مع معيار التوافق PHPC
    • عالج تحذيرات PHP المعروفة والتي تعد أخطاء PHP الفادحة ضمن PHP 8.0
    • إنشاء اختبارات آلية
    • استخدم PHPStan / Psalm أو أداة تحليل ثابتة أخرى
  • كيف تبدأ مع PHP 8.0 على WordPress VIP
    • قم بتشغيل التطبيق محليًا
    • تحقق من برنامج تحليل رمز VIP عند طلبات السحب
    • قم بتمكين PHP 8 في تطبيقات WordPress VIP الخاصة بك
    • استفد من المساعدة الاستباقية
  • ماذا عن PHP 8.1؟

قصة PHP 8.0

قدمت PHP 8.0 ، التي تم إصدارها في نوفمبر 2020 ، العديد من التحسينات والميزات التي جعلت الكود الجديد (والرمز الأقصر) أكثر مرونة ضد الأخطاء.

سيجد معظم المطورين فوائد كبيرة في PHP 8.0. ومع ذلك ، كإصدار رئيسي ، فإنه يحتوي على العديد من التغييرات الفاصلة. هذا يجعل التبديل من PHP 7.4 إلى PHP 8.0 أصعب من التغيير من PHP 7.3 إلى PHP 7.4 على سبيل المثال. على وجه التحديد ، كان هناك 49 تغييرًا جذريًا في PHP الأساسية ، و 169 في جميع أنحاء PHP 8 بشكل عام ، بما في ذلك في المكتبات والإضافات التي قد تعتمد عليها التعليمات البرمجية الخاصة بك.

الخبر السار هو أنه بمجرد انتقال المؤسسات إلى PHP 8.0 ، فإنها ستتلقى دعمًا أمنيًا من مشروع PHP الأساسي حتى نوفمبر 2023. بعد هذا التاريخ ، ستحتاج المؤسسة إلى الترقية إلى PHP 8.1 ، وهو إصدار بسيط يتطلب تغييرًا أقل بكثير.

ميزات جديدة

تم تصميم PHP 8.0 لـ 1) إصلاح حالات الحافة والتناقضات لجعل PHP لغة برمجة نصية أكثر صلابة ويمكن التنبؤ بها ، و 2) توفير ميزات جديدة لتحسين اللغة بشكل عام. يتضمن ذلك العديد من الصيغ الجديدة التي:

  • اجعل من السهل كتابة التعليمات البرمجية المكتوبة بدقة ، على سبيل المثال ، أنواع الاتحاد والأنواع static mixed وواجهة Stringable والتغييرات في معالجة الأرقام.
  • قم بتقليل مقدار التعليمات البرمجية التي يجب عليك الاحتفاظ بها ، على سبيل المثال ، عامل التشغيل nullsafe ، وترويج خاصية المُنشئ ، وعامل match ، ومزايدات الصيد غير الملتقطة.
  • تبسيط التعليمات البرمجية مثل السماح ::class على الكائنات ، وفاصلة زائدة في قوائم المعلمات ، و str_contains() ، str_starts_with() ، و str_ends_with() ، والتعبير الرمزي ، والسمات.

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

انتشار الدعم عبر مجتمعات PHP و WordPress

عندما يتم إصدار إصدار جديد من PHP يتضمن بناء جملة جديدًا ، يستغرق دعم الصيغ الجديدة وقتًا في جميع مجتمعات PHP و WordPress.

أدوات مطور PHP

تحتاج أدوات تطوير PHP مثل Composer و PHPUnit و PHP_CodeSniffer و PHPStan و Xdebug والعديد من IDEs إلى التعرف على التركيبات الجديدة لإصدار جديد من PHP. بينما يتم تطوير PHP باستمرار ، يمكن أن يكون هناك وقت تأخير قبل أن يتوفر النظام البيئي الكامل حول إصدار جديد. ومع ذلك ، في كثير من الأحيان ، يمكن أن تكون الأدوات جاهزة للعمل بحلول الوقت الذي يصبح فيه الإصدار النهائي جاهزًا لأن أعمال التطوير قد حدثت بناءً على إصدارات ألفا وبيتا والإصدارات المرشحة التي تم توفيرها مسبقًا. كل هذه الأدوات وغيرها تدعم الآن PHP 8.0 ، مما يجعلها خيارًا جيدًا لتطوير كود PHP وتحديدًا لتطوير WordPress.

ووردبريس الأساسية

بعد ذلك ، يحتاج WordPress الأساسي إلى دعم PHP 8.0. مشروع WordPress له تاريخ طويل من التوافق مع الإصدارات الجديدة من PHP بحلول وقت إصدارها. وفقًا لهذا المنشور المكتوب جيدًا على Make WP ، كان لدى WordPress "توافق تجريبي" مع PHP 8.0 منذ إصدار WordPress 5.6 في ديسمبر 2020. ماذا يعني "توافق بيتا"؟ هذا يعني أن WordPress يمكن أن يعمل بشكل جيد على PHP 8.0 ، لكن الميزات مثل الإعلان عن أنواع صارمة في ملفات WordPress الأساسية ، أو استخدام معلمات مسماة مع وظائف WordPress الأساسية ، غير مدعومة.

منصة WordPress VIP

دعمت منصة WordPress VIP PHP 8.0 (و PHP 8.1) منذ مايو 2022 ، بما في ذلك مجموعة المكونات الإضافية والميزات التي تتيح للنظام الأساسي تلبية احتياجات المؤسسة.

المكونات الإضافية لجهات خارجية

يحتوي WordPress على عشرات الآلاف من المكونات الإضافية ، ويختلف مستوى دعم PHP 8.0 بشكل كبير. على سبيل المثال ، قد تظل الكلمات المحجوزة حديثًا مستخدمة بواسطة مكون إضافي ، أو قد لا تكون المعلمات التي يتم تمريرها إلى وظائف PHP الأصلية من النوع المتوقع الآن. على هذا النحو ، قد تكون المكونات الإضافية للجهات الخارجية أحد المجالات التي قد تؤثر فيها حالات عدم التوافق مع PHP 8.0 على تطبيقك.

يمكنك أدناه معرفة كيفية التحقق من بعض حالات عدم التوافق هذه. تتضمن الخيارات مطالبة الفرد / الفريق الرئيسي بإجراء الإصلاحات وإصدار إصدار جديد ، أو وجود فريق تطوير داخلي أو وكالة ، مثل أحد شركائنا المميزين ، قم بتشكيل المكون الإضافي وإجراء الإصلاحات بأنفسهم.

الإضافات المخصصة

يستخدم كل عميل تقريبًا على منصة WordPress VIP واحدًا أو أكثر من المكونات الإضافية المخصصة. مثل المكونات الإضافية للجهات الخارجية ، يجب أيضًا التحقق من توافقها. إن مطالبة المطورين الأصليين بمعالجة المشكلات المكتشفة هو أفضل مسار للعمل بشكل عام.

سمات الطرف الثالث أو مخصصة

في حين أن المكونات الإضافية هي المصدر الأكثر احتمالاً لمشكلات التوافق ، لا تنسَ أن السمات المخصصة والجهات الخارجية تحتاج أيضًا إلى أن تكون متوافقة مع PHP 8.0. تنطبق نفس طريقة التحقق من توافق كود البرنامج المساعد على كود السمة.

كيفية البحث عن مشكلات توافق PHP 8.0

هناك أربعة أساليب رئيسية يمكن لفرق التطوير استخدامها لمراجعة التعليمات البرمجية لتحديد مشكلات التوافق:

  1. استخدم PHP_CodeSniffer مع معيار التوافق PHPC.
  2. عالج تحذيرات PHP المعروفة والتي تمثل أخطاء PHP الفادحة ضمن PHP 8.0.
  3. إنشاء اختبارات آلية.
  4. استخدم PHPStan / Psalm أو أداة تحليل ثابتة أخرى.

استخدم PHP_CodeSniffer مع معيار التوافق PHPC

يقوم PHP_CodeSniffer (PHPCS) بترميز ملفات PHP ويكتشف انتهاكات مجموعة محددة من معايير الترميز. هناك حزم لمعايير ترميز WordPress ومعايير ترميز VIP الخاصة بنا (والتي نشجع العملاء على استخدامها).

هناك أيضًا حزم تسمى PHPCompatibility و PHPCompatibilityWP ، وتحلل هذه المعايير قاعدة كود لتوافق PHP عبر الإصدارات.

نظرًا لأن النتائج تعتمد على قدرات الأداة وجاهزيتها ، فمن الضروري استخدام فرع develop من توافق PHPC حتى يتم إصدار الإصدار 10. سيحتوي الإصدار 10 على عمليات الشم المتعلقة بتوافق PHP 8.0 (و PHP 8.1). راجع مستنداتنا للحصول على إرشادات حول كيفية إعداد التكوين الخاص بك لاستخدام فرع develop . بمجرد إصدار الإصدار 10 ، يمكنك استخدام هذا الإصدار بدلاً من ذلك.

تعتمد حزمة PHPCompatbilityWP على حزمة توافق PHPC ولكنها توقف بعض عمليات التحقق من عناصر التوافق مع الإصدارات السابقة التي يحتوي عليها نواة WordPress نفسها.

باستخدام PHPCS و PHPC Compatibility / PHPCompatibilityWP ، يمكنك إجراء فحص:

 phpcs --standard=PHPCompatibilityWP --severity=1 --runtime-set testVersion 8.0- --extensions=php <path-to-code>

يمكن أن يكون <path-to-code> مكونًا إضافيًا مخصصًا أو مكونًا إضافيًا أو موضوعًا واحدًا مخصصًا أو تابعًا لجهة خارجية إذا كنت تريد أن تبدأ صغيرًا ، أو المستودع بأكمله إذا كنت تريد رؤية جميع الانتهاكات التي تحتاج إلى التحقيق فيها ومعالجتها.

لن تكتشف خطوات الفحص كل مشكلة محتملة في توافق إصدار PHP (مثل أنواع قيمة وقت التشغيل غير الصحيحة) ، ولكنها ستساعد في تحديد المشكلات الأكثر شيوعًا المتعلقة بالصياغة.

عالج تحذيرات PHP المعروفة والتي تعد أخطاء PHP الفادحة ضمن PHP 8.0

شهدت PHP 8.0 بعض تحذيرات المحرك المعاد تصنيفها ، حيث أصبحت التحذيرات خطأ فادحًا واستثناءات TypeError (وأصبحت بعض الإشعارات تحذيرات). نصوص PHP Warning التي يجب البحث عنها تحت PHP 7.4 هي:

  • Attempt to assign property '*' of non-object
  • Attempt to modify property '*' of non-object
  • Attempt to increment/decrement property '*' of non-object
  • Creating default object from empty value
  • Cannot use a scalar value as an array
  • Cannot add element to the array as the next element is already occupied
  • Cannot unset offset in a non-array variable
  • Only arrays and Traversables can be unpacked
  • Invalid argument supplied for foreach()
  • Illegal offset type
  • Illegal offset type in isset or empty
  • Illegal offset type in unset
  • Cannot assign an empty string to a string offset
  • Division by zero
  • Use of undefined constant *

يعد إصلاح هذه التحذيرات أمرًا ضروريًا لكي يكون التطبيق متوافقًا مع PHP 8.0.

ملاحظة: هناك أخطاء فادحة أخرى في PHP 8.0 لم تكن حتى تحذيرًا بموجب PHP 7.4. الامثله تشمل:

  • لا يجوز إعلان الطرق الخاصة نهائية باستثناء المنشئ.
  • تواقيع غير صالحة للطرق السحرية.
  • التحقق من صحة توقيع أسلوب السمات المجردة
  • استخدام parent:: مع فئة الوالدين.
  • تواقيع طريقة التحميل الزائد غير متوافقة (مبدأ استبدال Liskov)

تعتبر معالجة هذه التغييرات المعروفة مكانًا جيدًا للبدء. سيتم طرح TypeError باستمرار لجميع وظائف PHP الداخلية ، على سبيل المثال عند تمرير أنواع معلمات غير صالحة ، حتى عندما لا يتم التصريح بفحص صارم للنوع.

لاحظ أيضًا أن العامل @ لن يسكت الأخطاء الفادحة تحت PHP 8.0.

بطبيعة الحال ، يجب ألا ينتج عن تطبيقك أي أخطاء أو تحذيرات أو إشعارات. نشجعك على معالجة أي شيء تجده. بعض تحذيرات PHP تحت 8.x ستكون أخطاء فادحة تحت PHP 9.0 ، على سبيل المثال ، من المحتمل أن تؤدي إلى منطق غير صحيح ضمن PHP 8.x. يعتبر البناء في وقت التطوير قبل الإصدار وبعده لإصلاح مثل هذه المشكلات وتلك التي "تفلت من الاكتشاف" أثناء التطوير من أفضل الممارسات. إنه أيضًا استثمار في استقرار الموقع وقدرته على تلبية معايير القبول بدقة للميزة المرتبطة.

إنشاء اختبارات آلية

هناك العديد من الأنواع المختلفة للاختبارات الآلية ، ولكننا نعني هنا:

  • اختبارات الوحدة - تسخر من أي وظائف أو فئات محددة من WordPress ، ولا تحتاج إلى مثيل من قاعدة البيانات ليكون متاحًا لتشغيل الاختبارات.
  • اختبارات التكامل - تحميل WordPress واستخدام قاعدة بيانات اختبار فعلية

هذا الموضوع أكبر من أن يتم تغطيته جيدًا هنا ، ولكن هناك بعض الأشياء التي يجب وضعها في الاعتبار:

  • تعتمد النتائج على اكتمال مجموعة الاختبار. إذا لم يكن لديك العديد من الاختبارات ، فستفتقر إلى التغطية اللازمة لضمان التوافق.
  • استخدم تأكيدات صارمة. على سبيل المثال ، يؤدي استخدام assertEquals() إلى مقارنة فضفاضة ، بينما assertSame() أيضًا من النوع أيضًا.
  • استخدم تغطية صارمة للكود. أضف beStrictAboutCoversAnnotations=”true” و forceCoversAnnotations=”true” إلى ملف تكوين PHPUnit ، ثم استخدم التعليقات التوضيحية @covers للعثور على المستوى الدقيق لتغطية الكود الدولي عبر الاختبارات.
  • اختبر مسارات السعادة (السلوك بناءً على المدخلات المتوقعة) وغير السعيدة (السلوك القائم على المدخلات غير المتوقعة) للتأكد من فشل الوظائف بطريقة متوقعة ، حيث تحدث معظم المشكلات المتعلقة بالتشدد.
  • قم بتشغيل اختباراتك على PHP 8.0. بالنسبة لاختبارات التكامل (WordPress) ، تم إجراء تغييرات في عام 2021 على مجموعة الاختبار الأساسية لـ WordPress التي تم إلغاء قفلها باستخدام الإصدارات الأحدث من PHPUnit ، والتي بدورها تدعم PHP 8.0. هذا مدعوم من حزمة WP Test Utils ، والتي تتضمن دعم PHPUnit Polyfills و Brain Monkey و Mockery ، ووظائف إضافية لوظائف WordPress ، والوصول إلى جميع أدوات اختبار WP الأصلية مثل طرق المصنع لإنشاء المحتوى.
  • ضع في اعتبارك كتابة الاختبارات قبل محاولة الإصلاح ، لتكون أكثر ثقة في نجاح تغيير التوافق.

استخدم PHPStan / Psalm أو أداة تحليل ثابتة أخرى

بينما ستكتشف PHPCS بعض حالات عدم التوافق ، إلا أن هناك بعض التغييرات في وقت التشغيل التي لم يتم تصميم PHPCS لالتقاطها. أحد الأمثلة التي يمكن تفويتها هو أن وظائف PHP الأصلية تكون أكثر صرامة مع الأنواع التي يمكن تمريرها كمعلمات.

يمكن أن تساعدك هنا أداة مثل PHPStan أو Psalm أو أي أداة تحليل ثابتة أخرى. ولكن ، لكي تكون أكثر فاعلية ، فإنها تتطلب إما استخدام أنواع صارمة (المعلمات وأنواع الإرجاع في الكود) ، أو أن يتم توثيقها بشكل صحيح (param و @return الأسطر في @param ).

تحتوي هذه الأدوات عادةً على مستويات قواعد تسمح بإصلاح مشكلات المستوى الأدنى أولاً ، ثم تكامل الأداة تدريجياً لتحسين جودة قاعدة التعليمات البرمجية الخاصة بك.

يمكنك إضافة المعرفة لأنواع الكود الأساسي لـ WordPress من خلال ملحقات مثل phpstan-wordpress و psalm-plugin-wordpress.

بمجرد التهيئة ، سوف يبرز كل تشغيل المكان الذي تقوم فيه بتمرير أنواع غير متوقعة إلى وظائف ، مما قد يتسبب في طرح استثناءات خطأ TypeError فادحة. كل من هذه سوف تحتاج إلى إصلاح.

في كثير من الحالات ، قد تتمكن من منع استثناء TypeError من خلال استخدام كتل try-catch أو التلبيس. ومع ذلك ، نوصي بشدة بعدم القيام بذلك. سيؤدي إصلاح السبب الجذري إلى رمز أقوى وأقل هشاشة وعرضة للخطأ ، وسيؤتي ثماره دائمًا على المدى الطويل.

كيف تبدأ مع PHP 8.0 على WordPress VIP

قم بتشغيل التطبيق محليًا

يعد تشغيل مثيل من التطبيق محليًا خطوة أولى معقولة في القدرة على اكتشاف أي مشكلات توافق وإصلاحها. بينما يمكنك استخدام أي بيئة تطوير محلية ، لضمان أفضل تكافؤ مع منصة WordPress VIP ، نوصي ببيئة التطوير المحلي لكبار الشخصيات. من خلال تشغيل الأمر vip dev-env create --php=8.0 (مع VIP-CLI 2.9.5 أو أحدث) ثم إكمال باقي معالج الإعداد ، سيتم تشغيل التطبيق محليًا باستخدام PHP 8.0.

تحقق من برنامج تحليل رمز VIP عند طلبات السحب

إذا نظرت إلى أي طلبات سحب تم إجراؤها إلى المستودع الخاص بك ضمن مؤسسة wpcomvip ، فسترى روبوت تحليل رمز VIP يعطيك ملاحظات حول PHPCS و PHP linting و SVG linting.

بالنسبة لخطوة PHP Linting ، سيقوم الروبوت بفحص كود PHP بأي إصدار من PHP يتم استخدامه للتطبيق الذي يتم نشر المستودع عليه. إذا كان هذا الإصدار هو PHP 7.4 ، فسيتم فحصه تلقائيًا باستخدام PHP 8.0 أيضًا ، استعدادًا للمحول القادم.

قم بتمكين PHP 8 في تطبيقات WordPress VIP الخاصة بك

بمجرد قيامك بأكبر قدر ممكن من الفحص والإصلاح محليًا ، فقد حان الوقت لتمكين PHP 8.0 على تطبيق WordPress VIP الخاص بك. ابدأ بأدنى بيئة لديك ، وتحقق من أن كل شيء يبدو جيدًا (بما في ذلك سجلات PHP عبر vip-cli أو Health Logs في لوحة معلومات VIP) قبل الانتقال إلى بيئة الإنتاج.

لتمكين PHP 8.0 على بيئة ما ، افتح بطاقة Zendesk لإعلامنا بالتطبيق والبيئة التي تريد تمكينها عليها.

سنقوم قريبًا بإطلاق ميزة جديدة في VIP Dashboard للسماح بتغيير إصدار PHP دون الحاجة إلى فتح تذكرة. تحقق دائمًا من الردهة للحصول على أحدث المعلومات.

استفد من المساعدة الاستباقية

تتواصل فرق الحسابات لعملاء Premier بالفعل مع العملاء لمناقشة كيف يمكننا دعمهم. سيتم إرسال النتائج من PHPCS وإرشادهم حول كيفية إجراء هذه الفحوصات بأنفسهم. سيتم أيضًا إبراز تحذيرات PHP التي ستصبح أخطاء فادحة ، مما يمنحهم السبق في معالجة حالات عدم التوافق.

ماذا عن PHP 8.1؟

تدعم منصة WordPress VIP أيضًا PHP 8.1. هناك تغييرات أقل بين PHP 8.0 و PHP 8.1 أقل من تلك الموجودة بين PHP 7.4 و 8.0 ، مما يعني أنه يجب أن يكون هناك عدد أقل من حالات عدم التوافق التي يجب معالجتها.

PHP 8.1:

  • يتمتع بدعم نشط من مطوري PHP الأساسيين حتى تشرين الثاني (نوفمبر) 2023 ، ودعم الأمان حتى تشرين الثاني (نوفمبر) 2024.
  • يمكن التعامل مع طلبات أكثر في الثانية من PHP 8.0.
  • لديه دعم "توافق بيتا" على WordPress 5.9 وما فوق - وهذا يعني أن هناك بعض ملاحظات الإيقاف استعدادًا لـ PHP 9 ، ولكنها لا تؤثر على سلوك نواة WordPress.

ستساعد التغييرات المفيدة المطلوبة لـ PHP 8.0 ، مثل استخدام كود مكتوب بدقة وإضافة اختبارات آلية ، في طرح PHP 8.1 ، بالإضافة إلى ترقيات WordPress 6.1 و 6.2 و 6.3 وما بعده ، بالإضافة إلى أي إصدارات ميزة تقوم بها. غالبًا ما تكون عملية ضمان الجودة هي العقبة ، لذا فإن استخدام بعض الأدوات والأساليب التي حددناها يمكن أن يقلل العمل اليدوي ويمنحك المزيد من الثقة عند نشر هذه التغييرات.

إذا كان لدى العملاء أسئلة حول PHP 8.0 ، فيرجى فتح التذاكر معنا.