WordPress & PHP 8 - التوافق والفوائد!
نشرت: 2021-01-04معظم خبراء التكنولوجيا متحمسون لـ PHP 8.0 ، وبالتأكيد التغييرات ضخمة هذه المرة. سيستهلك الجميع بعض الوقت لفهم التوافق والتكوينات والمزايا وما إلى ذلك ، في PHP 8 ، ومن بين جميع الأسئلة ، فإن أحد أكبر الأسئلة التي ظهرت هو - "هل WordPress متوافق بالفعل مع PHP 8 ، وإذا لم يكن كذلك ، ما هي الإجراءات المطلوبة. "
حسنًا ، بمجرد إصدار PHP 8 ، غاص وقت الخبراء لدينا في أعمق مستوى من الاختبار ، والنتيجة يمكن أن تصدم أي شخص! نعم ، نحن نعرف كل شيء الآن ويسعدنا التباهي بتقاريرنا ونتائج التذوق.
لن نعرض فقط كل ما تغير ، ولكن سنقدم لك أيضًا نصيحة صرفة بشأن ما إذا كان يجب عليك التحديث إلى PHP 8 أم لا.
الكثير من التغييرات في PHP 8: لكن لماذا؟
يعد PHP 8 تحديثًا ضخمًا لـ PHP ، ومن الممارسات الشائعة إزالة السلبيات في الإصدارات الرئيسية من مجموعة الإصدارات الثانوية الحديثة. بالنسبة إلى PHP 8 الأكثر شيوعًا ، تم تقليل العديد من التغييرات المتقطعة في إصدارات 7. * السابقة.
وبالتالي ، بالنسبة للمشروعات التي تم تحديثها بعناية على مر السنين ، لإصلاح واجهات برمجة التطبيقات التي تم تقييدها ، لا ينبغي أن يكون من الصعب الترقية على الإطلاق. بصدق ، لاحظت إصدارات PHP 7. * مجموعة أكبر من الإهمال على عكس الإصدارات السابقة من PHP.
قد نقول أن PHP 5.6 إلى PHP 7 كانت عملية ترحيل بسيطة جدًا ، ولكن الانتقال من 7.x إلى 8 قد يكون مؤلمًا إلى حد ما ، خاصة بالنسبة لقواعد الرموز القديمة ، بما في ذلك WordPress ، إلى جانب العديد من المكونات الإضافية المتاحة.
بالتأكيد ، بالنسبة لقواعد الكود المكتوبة جيدًا أو قواعد الأكواد المحدثة بأحدث إصدارات PHP ، لن تحدث مشكلات كبيرة. ومع ذلك ، فإن الحقيقة هي أن WordPress ليس قاعدة بيانات.
هل WordPress متوافق بالفعل مع PHP 8؟
بصراحة ، ربما يكون WordPress متوافقًا بالفعل مع PHP 8 ، لكن إغلاق هذه الكلمات غير ممكن. يهدف WordPress إلى أن يكون متوافقًا دائمًا مع أحدث إصدارات PHP . ومع ذلك ، فقد حللنا بعمق أكبر المخاوف لاحقًا في هذا الدليل.
لقد قمنا بعمل رائع فيما يتعلق بإيجاد الحلول المثالية لمعظم مشاكل التوافق التي يمكن العثور عليها باستخدام الاستراتيجيات المتاحة. سوف نتعمق بالتأكيد في كل ما كان هناك والمشاكل الموجودة معهم.
ما هي تغييرات الأداء القادمة؟
الميزة الرئيسية التي يحتمل أن تكون مثيرة والتي تأتي مع PHP 8 هي تجميع وتصحيح JIT (Just In Time). كما نعلم ، PHP هي لغة مفسرة ، مما يعني أنها تُترجم إلى كود آلي عند تشغيلها.
يتتبع JIT الكود الذي يتم استخدامه بشكل متكرر ويعمل على تحسين ترجمة الكود الآلي لجعله قابلاً لإعادة الاستخدام. الآن ، يمكن أن يؤدي هذا إلى تحسين كبير في الأداء لوظيفة معينة.
أدى إدراج JIT بلغات مختلفة ، على سبيل المثال JavaScript ، إلى إحداث انفجار في التطبيقات الجديدة. على سبيل المثال ، الأجهزة الافتراضية التي تعمل في JS كانت خارجة عن الخيال في الأيام الأولى للويب. بعض المهام التي كانت تتطلب تثبيت الوحدات النمطية على الخادم في الماضي ستكون عملية باستخدام مكتبات PHP الأساسية.
في الوقت الحالي ، يعد رفع الأداء الفعلي لتطبيقات الويب مثل WordPress ضئيلًا. إلى جانب ذلك ، سيستغرق الأمر وقتًا طويلاً قبل أن يجني مطور أو مستخدم WordPress متوسط مزايا هذه الميزة الجديدة.
هناك العديد من الميزات الجديدة الأخرى لتسهيل حياة المطورين ؛ من غير المحتمل أن يتم استخدام هذه في قوالب WP والمكونات الإضافية في المستقبل المنظور لأن الغالبية ستفقد التوافق مع إصدارات PHP السابقة التي لا تزال قيد الاستخدام من قبل العديد من مواقع WordPress.
كيفية تحديث PHP لموقع WordPress الخاص بك؟
في هذا الدليل ، سنصف مدى سهولة تحديث PHP إلى أحدث إصدار ، والأهم من ذلك ، دون كسر موقع WordPress الخاص بك.
إذا كنت حريصًا على معرفة المسار ، فما عليك سوى التحقق من إصدار PHP الحالي ، ثم تحديث WordPress إلى الإصدار الأحدث. بعد ذلك ، قم بتثبيت “one.com PHP scanner” وقم بإجراء فحص لإصلاح المشكلات المحتملة. علاوة على ذلك ، قم بتحديث PHP إلى أحدث إصدار ، وتحقق مما إذا كان موقعك يعمل بالشكل المتوقع أم لا.
دعونا نظهر العملية برمتها.
الخطوة 1: تحقق من إصدار PHP الحالي لديك
في البداية ، عليك التحقق من إصدار PHP الذي تستخدمه حاليًا. يمكنك الحصول على معلومات إصدار PHP الحالي لموقعك على الويب من صفحة phpinfo.
إذا كنت تعمل على cPanel ، فيمكنك عرض إصدار PHP من المقالة كيفية عرض إصدار PHP وتغييره في cPanel.
إذا كنت تستخدم PHP الإصدار 7.3 أو أعلى ، فكل شيء على ما يرام. بالنسبة لأولئك الذين لديهم PHP 7.2 ، هناك حاجة إلى التحديث. يرجى الاعتزاز بالخطوة 2.
الخطوة الثانية: قم بتحديث WordPress إلى أحدث إصدار
تأكد من تحديث WordPress core وجميع المكونات الإضافية والسمات إلى أحدث إصدار إذا كنت تريد حقًا تجنب أي عطل.
- قم بتسجيل الدخول إلى مسؤول WordPress الخاص بك وانقر فوق لوحة التحكم > التحديثات .
- تحقق مما إذا كان لديك أحدث إصدار من WordPress مثبتًا وأن جميع السمات والإضافات محدثة. قم بتحديث WordPress الخاص بك إلى أحدث إصدار الآن.
الخطوة 3: قم بتثبيت "one.com PHP scanner."
- في مسؤول WordPress الخاص بك ، انقر فوق one.com > المكونات الإضافية .
- حدد موقع one.com PHP scanner وانقر فوق تثبيت الآن .
- الآن ، انقر فوق تنشيط ، وانتقل إلى الخطوة التالية.
الخطوة 4: قم بإجراء فحص وإصلاح المشكلات المحتملة
- في القائمة الموجودة على اليسار ، انقر فوق PHP scanner .
- انقر على الإصدار 7.4 من PHP ، ثم " جميع السمات والإضافات " ، ثم انقر على بدء المسح .
- يمكنك المتابعة بمجرد انتهاء الفحص.
- يمكنك الحصول على ثلاث نتائج:
- متوافق = هذا يعني أن كل شيء على ما يرام!
- تحذير = يعني أنه يجب أن يعمل ولكن قد يسبب مشاكل مع إصدار PHP القادم.
- خطأ = ليس جيدًا ، سيؤدي بالتأكيد إلى حدوث مشكلات بعد التحديث.
أصلح أي سمات أو مكونات إضافية تقرأ الأخطاء ، إما عن طريق تحديثها إلى أحدث إصدار أو عن طريق استبدالها بمكوِّن إضافي بديل يوفر نفس الوظيفة.
نصيحة: نوصيك باستخدام تلك المكونات الإضافية فقط التي تستخدم المكونات الإضافية التي يتم تحديثها بانتظام ولا تسبب أي مشاكل في التوافق مع أحدث إصدار من WordPress. إلى جانب ذلك ، من الممارسات الجيدة إزالة أي مكونات إضافية غير مرغوب فيها لتحسين أداء الموقع.
الخطوة الخامسة: تحديث PHP إلى الإصدار 8.0
أنت الآن جاهز لتحديث PHP. نوصي بتشغيل رسائل خطأ PHP في نفس الوقت. في حالة وجود مشكلة في الكود ، سترى رسائل خطأ تخبرك بما يسببها وأيضًا مكانها بالضبط.
- في لوحة التحكم ، ارجع إلى PHP وإعدادات قاعدة البيانات .
- قم بالتمرير لأسفل وصولاً إلى رسائل خطأ PHP .
- انقر فوق تحديث بعد تعيين رسائل الخطأ على تشغيل .
- أسفل هذا مباشرة ، قم بتغيير الإصدار وانقر فوق تحديث .
الخطوة 6: تحقق مما إذا كان موقع الويب الخاص بك يعمل كما هو متوقع.
الآن ، لقد تم تحديث إصدار PHP ، وسوف يستغرق الأمر 20 دقيقة على الأقل قبل تطبيق التغييرات. إذا كان موقعك يستقبل الكثير من الزوار ، فقد يمتد الإطار الزمني إلى عدة ساعات. هذا هو السبب في أننا نوصي بالتحقق من موقع الويب الخاص بك بضع مرات على الأقل خلال الـ 24 ساعة القادمة.
في حالة عدم عمل موقعك ضد ما كنت تتوقعه ، فإن المشكلة الأكثر احتمالاً هي المظهر أو أي مكون إضافي. لمعرفة سبب المشكلات بالضبط:
- قم بالتبديل مؤقتًا إلى سمة WordPress الافتراضية ، ونقول ، "Twenty Seventeen".
- حدد جميع المكونات الإضافية المثبتة وقم بإلغاء تنشيطها تمامًا.
- قم بتمكين السمات وجميع المكونات الإضافية مرة أخرى ، واحدًا تلو الآخر ، واستمر في التحقق في كل مرة مما إذا كان موقعك لا يزال يعمل أم لا. يمكنك القبض على الجاني بهذه الطريقة.
إذا تحدثنا تقنيًا ، فإن توافق الوقت الحاضر ليلاً من WordPress مع PHP 8 الذي تمت مناقشته بشكل كبير يكون بمستوى مماثل لما نعيشه في إصدارات WordPress قبل ظهور إصدار جديد من PHP.
كان اختبارنا كبيرًا ، وكان الإصلاح دقيقًا ، وكان مستوى إصلاح المشكلات كبيرًا مثل أي إصلاح توافق PHP داخل نواة WordPress. ومع ذلك ، إذا لم تتبع هذا الدليل ، فلن تتمكن من فهم تحديات التوافق وجني أقصى الفوائد من PHP 8.
الكم الهائل من التغييرات المعطلة وأنواع التغييرات المضمنة في PHP 8 ، بالإضافة إلى بعض التعقيدات المضافة في أدوات النسخ المتقاطعة ، تجعل هذا التوافق بالتأكيد يتحدى وحشًا أكبر مما شهدناه من قبل مع الإصدارات السابقة من PHP. يهدف هذا التقرير إلى شرح نفس الحالة.
تحديات التوافق مع WordPress و PHP8
سنعرض لك بعض الاستراتيجيات التي يمكنك نشرها لإنشاء قاعدة بيانات متوافقة مع PHP 8.
- أدوات التحليل الثابتة مثل PHPC التوافق لاكتشاف المشاكل النحوية.
- اختبار آلي لاكتشاف مشاكل وقت التشغيل.
- اختبار يدوي لاكتشاف مشاكل وقت التشغيل.
اعتمادًا على تغطية مجموعة الاختبار الخاصة بك ونسبة التغييرات النحوية ووقت التشغيل ، تعمل هذه الاستراتيجيات بشكل جيد لإصلاح توافق قاعدة التعليمات البرمجية مع إصدار جديد من PHP (تناقش حاليًا PHP 8).
حقًا ، في حالة PHP 8 و WordPress ، هناك بعض التحديات الإضافية التي تجعل من الصعب الاعتماد على هذه الاستراتيجيات وفقًا لضمان التوافق التام بين WordPress و PHP 8. فيما يلي سنقدم تقريرًا عن الاستراتيجيات التي نشرناها لـ WordPress وشارك النتائج.
أدوات التحليل الثابتة
نظرًا لطبيعة بعض التغييرات في PHP 8.0 ، فإن المشكلات التي يمكن اكتشافها باستخدام التحليل الثابت محدودة. في تلك الظروف ، حيث يتطلع التحليل الساكن إلى تجاوز إمكاناتهم وخططهم التقليدية لتتبع قيمة المتغيرات والثوابت ونوع وقت التشغيل ، فإن نتائج مثل هذه الفحوصات ستكون بالتأكيد عرضة للإيجابيات الخاطئة.
بالإضافة إلى ذلك ، يعد توافق PHP أداة التحليل الثابتة الوحيدة التي تهدف إلى العثور على المشكلات المتعلقة بتوافق PHP عبر الإصدارات.
إلى جانب توافق PHP ، تقدم أدوات التحليل الثابت الأخرى تقريرًا عن نطاق أكبر من المشكلات. إن الاعتزاز بالنتائج لاكتشاف المشكلات ، والتي تتعلق بتوافق PHP عبر إصدارات وصحيحة بالفعل ، يستغرق وقتًا طويلاً ويحتاج إلى معرفة متعمقة بالأدوات المتعلقة بالأدوات ، خاصةً حول تكوينها بأقل قدر من الضوضاء.
في الوقت نفسه ، تظل هذه الأدوات في حالة عدم استقرار مستمر ، وتحاول متابعة التغييرات في إصدار PHP وتحديث عمليات الفحص المحتملة. وبالتالي ، يمكننا أن نتوقع أن تكتشف هذه الأدوات المزيد من المشكلات في المستقبل القادم.
لذلك ، وبغض النظر عما كان موجودًا بالفعل ويمكن العثور عليه في هذا الوقت ، فإن الاحتمالات هي أن هذه الأدوات ستستمر في العثور على المزيد من المشكلات في المستقبل (القريب).
مسح ووردبريس مع التوافق مع PHPC
لن يتم استدعاء "__destruct () بعد die () في __construct () بعد الآن" هي مشكلة PHP 8 أخرى تم العثور عليها بواسطة PHPCompatibility. تم الكشف عن هذا بشكل مثالي بواسطة الماسح الضوئي. ومع ذلك ، بعد إجراء مزيد من التحليل ، تم التوصل إلى عدم وجود مشكلة في هذه الحالة.
بالإضافة إلى ذلك ، اكتشف توافق PHPC مشكلة في التعليمات البرمجية التي يستخدمها "محرر المكون الإضافي / الموضوع". حددت تحليلات الكود المتضمن وجود إشراف أساسي في الكود. في المحرر ، يتطلع WordPress إلى إجراء الحد الأدنى من تحليل الكود ؛ ومع ذلك ، فإنه لا يأخذ في الاعتبار كود PHP 5.3+.
مع أخذ التغييرات ذات الصلة في PHP8 في الاعتبار ، أصبح حل هذا الخطأ أكثر تعقيدًا. أجرينا عمليات مسح باستخدام توافق PHPC مع الإصدار المطور ، وكانت النتائج ، كما توقعنا ، مختلفة كثيرًا عما حصلنا عليه مع التحديثات السابقة لـ PHP. يتم الاحتفاظ بالمشكلات المكتشفة بواسطة الماسح خارجيًا.
مسح ووردبريس باستخدام Exakat
بالحديث عن أحدث مسح عام تم إجراؤه في 16 أكتوبر ، بناءً على WP trunk ، أبلغ Exakat عن 149.567 مشكلة في المجموع.
يوضح لنا تقرير توافق PHP 8 إجمالي 93 مشكلة. ومع ذلك ، فهي غير مكتملة لأن رقم التحليل المتعلق بـ PHP 8 غير مدرج في التقرير.
بينما نتوقع أن تحتوي هذه التقارير على عدد كبير من الإيجابيات الخاطئة لأن WordPress لا يستخدم بيانات النوع ، وبالتالي يتم استقراء الأنواع من الكود الموجود والأنواع الموضحة في docblocks ، لا يزال يتعين فحص هذه المشكلات بشكل فردي.

بغض النظر عن 1 ٪ فقط من المشاكل التي تم العثور عليها صحيحة ، فإنها ستظل تتراجع إلى ~ 450 خطأ ، والتي لا تزال بحاجة إلى التعامل معها. إلى جانب ذلك ، فإن القدر الكبير من الوقت المطلوب للتخلص من القضايا الحقيقية من الإيجابيات الزائفة.
مسح WordPress باستخدام PHPStan
تتطلب عمليات المسح باستخدام PHPStan مجموعة قواعد مخصصة بالكامل لتحقيق نتائج قابلة للاستخدام عن بُعد ، ومع ذلك ، فإنها تثبت أنها مليئة ببعض الإيجابيات الخاطئة ، مما يجعل المخرجات غير قابلة للاستخدام.
ملاحظة: نحن لا ننتقد أدوات PHPStan ، ولكن هذا يرجع بشكل كبير إلى حقيقة أن WordPress بالكاد يستخدم إعلانات الكتابة ، بينما من ناحية أخرى ، تميل PHPStan بشكل أساسي نحو المشاريع التي تستخدم الكود الحديث ، أليس كذلك؟
سيؤدي الفحص الأولي الذي يشتمل على أبسط التكوينات إلى أكثر من 20.000 مشكلة. لا يزال الفحص باستخدام مجموعة القواعد المذكورة أعلاه المخصصة للغاية ، والموجودة في المشكلات المتعلقة بـ PHP 8 على وجه التحديد ، ينتج 580 مشكلة بالضبط في المستوى 5 و 2.150 مشكلة محتملة إضافية في المستوى 7. من المحتمل أن تحتوي هذه على عدد قليل من الإيجابيات الخاطئة ومع ذلك تسفر عن 380 مشكلة أخرى في المستوى 8 مع تحذير مماثل.
تم فتح تذكرة Trac مؤخرًا لمعالجة قائمة من المشكلات على أساس تكوين غير معروف ، ولكن تم اجتياز نوع المعلمة غير المتطابق المستهدفة بالكامل (المستوى 5). مسودة العلاقات العامة متاحة لإصلاح هذه المشكلات.
يشير التقييم الاستبدادي لهذا العلاقات العامة إلى أن معظم الإصلاحات المقترحة سوف تقوم بتلوين متغيرات النوع المتوقع وإخفاء المشكلات ، وليس إصلاحها فعليًا عن طريق التحقق بشكل صحيح. يؤدي هذا إلى سلوك غير متوقع في التطبيق في حالة عدم اقتران هذه التغييرات باختبارات وحدة صارمة. إلى جانب ذلك ، من المحتمل أن يؤدي الحل إلى زيادة الصعوبة أثناء تصحيح الأخطاء بشكل أكبر على طول الخط بالتأكيد.
حاليًا ، لم يتم تأكيد ما إذا كانت الإصلاحات المقترحة لها ما يبررها أو أنه يجب ملاحظة المشكلات المحددة كإيجابيات كاذبة.
اختبارات
يمكن للتحليل الثابت أن يذهب بعيدًا بسبب طبيعة المقايضات الإشكالية في PHP8. تثبت مراجعة البرامج واختبارها يدويًا أنها عمل شاق ، كما أن البشر يميلون أيضًا إلى التغاضي عن الأشياء عندما يكون هناك الكثير الذي يجب البحث عنه.
الآن ، بالحديث عن الاختبارات التي يقوم بها المستخدمون النهائيون ، فقد ثبت أنها عديمة الفائدة نسبيًا ، حيث سيؤدي ذلك عادةً إلى اختبار "المسارات السعيدة". إذا أردنا تحقيق نتائج أكثر موثوقية ، فنحن بحاجة إلى اختبار استكشافي وانحدار شامل.
يعد إجراء اختبارات آلية عالية الجودة وتشغيلها على PHP 8 أكثر أهمية من أي شيء آخر. سيوفر هذا مؤشرًا مثاليًا لإصدار PHP 8.0 الذي يمكن توقعه.
معظم خبراء التكنولوجيا متحمسون لـ PHP 8.0 ، وبالتأكيد التغييرات ضخمة هذه المرة. سيستهلك الجميع بعض الوقت لفهم التوافق والتكوينات والمزايا وما إلى ذلك في PHP 8 ، ومن بين كل ذلك ، فإن أحد أكبر الأسئلة التي ظهرت هو - "هل WordPress متوافق بالفعل مع PHP 8 ، وإذا لم يكن كذلك ، فما الإجراءات؟ مطلوبين."
حسنًا ، بمجرد إصدار PHP 8 ، غاص وقت الخبراء لدينا في أعمق مستوى من الاختبار ، والنتيجة يمكن أن تصدم أي شخص! نعم ، نحن نعرف كل شيء الآن ، ويسعدنا التباهي بتقاريرنا ونتائج الاختبارات.
دعنا ننتقل إلى إجراء الاختبارات الآلية على PHP 8 الآن.
إجراء الاختبارات الآلية على PHP 8
PHPUnit 9.3 هو أول إصدار من PHPUnit متوافق رسميًا مع PHP 8.0 ، وقد تم إصداره في أغسطس 2020. حسنًا ، تشغيل مجموعة اختبار آلية تعمل على PHP صعب لأن الأداة الفعلية لاختبار الوحدة.
إن الحصول على مجموعة اختبار آلية للتشغيل على PHP 8 يأخذنا إلى أسفل حفرة الأرانب التالية كأداة فعلية لإجراء اختبار الوحدة في عالم PHP ؛ عادةً ما تقوم PHPUnit بإصدار ضخم كل عام ، مع كل انخفاض كبير يدعم إصدارات PHP السابقة. يقدم تغييرات عاجلة ، ولكن نظرًا لأن PHPUnit 9.3 متوافقة رسميًا مع PHP 8.0 ، كما ذكرنا أعلاه ، فلا داعي للقلق!
نعلم أن WordPress ، كحد أدنى ، لا يزال يدعم PHP 5.6. لإجراء الاختبارات على PHP 8.0 ، يجب أن تكون أي مجموعة اختبار مرتبطة بـ WordPress متوافقة تمامًا مع PHPUnit 5 حتى PHPUnit 9. بالتأكيد ، تم تصميم الأدوات لمساعدتك في ذلك ؛ لا يزال تطبيق هذه الأدوات يستهلك الجهد والوقت لجعل مجموعة الاختبار متوافقة.
إجراء الاختبارات على PHP8 لـ WordPress Core
يتم حاليًا اجتياز اختبارات WP Core وتشغيلها مقابل PHP 8. يتم إجراء هذه الاختبارات على إصدار الملحن PHPUnit 7.5 المثبت. على الرغم من أن PHPUnit 9.3 هي أقدم إصدار من PHPUnit متوافق رسميًا مع PHP 8.
تمت معالجة هذه المشكلة الأخيرة عن طريق نسخ عدد محدد من الملفات / الفئات من PHPUnit 9.3 إلى مجموعة اختبار WordPress ، باستثناء الفئات الأصلية لـ PHPUnit من إنشاء التحميل التلقائي للملحن ، ودعم استخدام النسخ من PHPUnit 9.3 في مجموعة اختبار WordPress. يعمل هذا ، في الوقت الحالي ، ومع ذلك ، فإننا نطلق عليه اسم حل مبتكر ، وقد لا يكون مستدامًا في المستقبل ، إلى جانب الصيانة التي قد تحتاجها حاليًا.
من أجل جودة الاختبارات ، كان هذا بالتأكيد منخفضًا في البداية ، مع استخدام فحص فضفاض في معظم الحالات.
للتعمق أكثر ، تم فتح تذكرة Trac لمعالجة هذا الأمر مرة أخرى في عام 2016. بالنظر إلى الالتزام الأكثر صرامة في PHP ، تمت استعادة هذه البطاقة. تم القيام بالكثير من العمل للتخفيف من هذا.
بينما كتبنا ، هناك حوالي 800 حالة (676 assertEquals () مضافة إلى 96 assertNotEquals ()). لا تزال تستخدم فحص النوع غير المحكم - أقل من 8000+ مثيل.
جزئيًا ، تأكيدات النوع غير المحكم المتبقية شرعية عند مقارنة الكائنات ؛ جزئيًا ، هذه بالتأكيد بحاجة إلى معالجة. ومع ذلك ، فإنه سيؤدي حاليًا إلى فشل الاختبار. تؤكد هذه الأخيرة على أوجه القصور في الاختبارات ، ولكن في كثير من الأحيان ، في الكود الذي يتم اختباره.
اختبار السمات والإضافات
لا يوجد سوى نسبة صغيرة من المكونات الإضافية المتاحة ، منها تلك التي تم تطويرها بشكل احترافي والأكثر شهرة ولديها اختبارات آلية. بشكل عام ، هذا أمر مقلق لأن موقع WordPress العادي يعمل بما يقرب من 19 أو 20 مكونًا إضافيًا بالتأكيد. هناك عدد غير قليل من المواقع التي تعمل مع المزيد من المكونات الإضافية! يعد إجراء اختبار آلي للسمات أمرًا نادرًا.
من الصعب السماح لهذه المجموعات التجريبية بالعمل على الإصدار 8. من PHP وأيضًا قبل الحصول على نظرة ثاقبة فيما يتعلق بتوافق المكونات الإضافية والسمات مع PHP 8.
ومع ذلك ، فإن المكونات الإضافية / السمات التي تحتوي في الغالب هي تلك التي يمكن توقع الحد الأدنى من مشكلات PHP 8.0. نحن نهتف بذلك لأن مثل هذه السمات / المكونات الإضافية تستخدم نموذج تطوير احترافي.
السبب الأكبر للقلق هو العديد من الاختبارات والموضوعات بدون اختبارات ، لأنها أكثر عرضة للإشكالية أثناء التشغيل باستخدام PHP 8.
بالنسبة للقوالب والمكونات الإضافية ، التي تحتوي على اختبارات ، يوجد نوعان أساسيان من الاختبارات التي قد تكون موجودة أو لا تكون موجودة:
- اختبارات الوحدة . الاختبارات المستقلة التي "تسخر" من WP للسماح باختبار كود البرنامج المساعد. يتم استخدام أطر عمل شائعة مثل BrainMonkey و Mockery .
- اختبارات التكامل . الآن ، اختبارات التكامل هي المكان الذي يتم فيه تحميل WordPress نفسه قبل تشغيل مجموعة الاختبار ، وسوف يستخدم كود WPcore ويتكامل مع مجموعة اختبار WP.
اختبارات التكامل
نعلم أن WordPress قرر التمسك بـ PHPUnit 7.5. ماذا يعني ذلك؟
حسنًا ، بالنسبة لاختبارات التكامل للقوالب والمكونات الإضافية ، سيتم أيضًا الانتقال إلى PHPUnit 7.5 (كحد أقصى).
سيتعين على السمات والمكونات الإضافية إما نسخ الاختراق في WP core لتشغيل اختبارات التكامل الخاصة بهم بشكل مثالي ، أو بدلاً من ذلك ، سيتعين عليهم استخدام الملفات في WP Core. ومع ذلك ، سيتعين عليهم بعد ذلك إنشاء أداة تحميل تلقائي مخصصة لأنه لا يمكن استخدام نفس اختراق إنشاء التحميل التلقائي لـ Composer.
إذا احتاجت ملفات PHPUnit الأصلية إلى منع تحميلها على أي حال ، فسيتعين بالتأكيد بدء تشغيل برنامج التحميل التلقائي المخصص هذا قبل ملف التحميل التلقائي لـ Composer.
اختبارات الوحدة
بالنسبة لاختبارات الوحدة بمساعدة Mockery أو BrainMonkey ، فإن PHPUnit> 8 مطلوبة لأن إطار عمل Mockery المتاح لـ PHPUnit 7.x غير متوافق مع PHP 8.0. وبالتالي ، فإن إمكانية مقارنة مجموعات الاختبار هذه إلزامية مع PHPUnit 5 حتى 9 ، مما يضيف بالتأكيد تحديًا آخر.
كيف؟
يلزم وجود إصدارات مختلفة من PHPUnit لتشغيل كل مجموعة اختبار عند استخدام نوعي مجموعتي الاختبار. لتفاقم هذا الظرف ، ستحتوي المكونات الإضافية عادةً على ملف composer.lock ملتزم لضمان أن تبعيات وقت التشغيل في إصدار معين يمكنهم الاعتماد عليه ومتوافق تمامًا مع PHP 5.6.
في أوقات معينة ، يتم فرض هذا الجزء الأخير من خلال وجود أنواع تكوين نظام أساسي php 5.6 في ملف composer.json. هذا يعني أيضًا أن تبعيات مطوري البرامج BrainMonkey و Mockery و PHPUnit سيتم قفلها أيضًا في إصدار متوافق مع PHP 5.6. الآن ، سيؤدي ذلك بالتأكيد إلى منع تشغيل الاختبارات على PHP 8.0.
يمكنك التغلب على ذلك عن طريق إزالة النظام الأساسي إلى جانب تحديث ملفات composer.lock و composer.json. ومع ذلك ، فإن هذا يجعل تشغيل الاختبارات على PHP 8.0 أكثر تعقيدًا ، سواء في CI أو محليًا ، لمطوريها.
يبدو توافق PHP 8 صعبًا إلى حد ما على مواقع WordPress الكبيرة
بمجرد التحقيق في سلسلة من التغييرات الفاصلة في PHP 8 ، يمكننا أن نؤكد أن هذا قد يتسبب في حدوث كسر كبير في المواقع مع سبب غير واضح لهذا الكسر. في أوقات معينة ، سيحدث الخطأ في مكان واحد ولكن يتم إنشاؤه بواسطة سمة أو مكون إضافي في مكان مختلف ، وهو أمر سيجعل بالتأكيد تصحيح هذه المشكلات أمرًا صعبًا.
إن accuwebhosting.com هو بالتأكيد موقع WordPress يتم صيانته بنشاط ، ويدعمه فريق متخصص من المطورين المحترفين. لا تتمتع الغالبية العظمى من مواقع WordPress بمثل هذه الرفاهية ، وسيكون التخفيف من مشكلات التوافق على هذه المواقع أمرًا صعبًا بالتأكيد.
كم من الوقت يجب على المطورين التحديث؟
تبلغ دورة حياة كل إصدار من PHP عامين ، وقد تم إصلاح الأخطاء في هذا العصر. تتم إضافة سنة أخرى يتم خلالها تصحيح مشاكل الأمان. وصل PHP 7.4 في نوفمبر 2019. كان الإصدار الأخير من PHP 7. وهذا يعني أنه سيتم إصلاح الأخطاء في PHP 7.4 حتى نوفمبر 2021. سيتم تصحيح المشكلات الأمنية حتى نوفمبر 2022. وستصل إلى "نهاية العمر". في ذلك الوقت.
ومن ثم ، فإن الموعد النهائي النهائي هو نوفمبر 2022: يجب أن تكون جميع أكواد PHP متوافقة مع PHP 8 بحلول هذا الوقت ، أو مخاطر التعطل في إصدار PHP يحتمل أن يكون ضعيفًا.
استنتاج
سيحتوي PHP 8 على العديد من التغييرات المتقطعة. لقد وصفنا مجموعة جيدة من هذه التغييرات في تقريرنا ، تلك التي يفترض خبراؤنا أنها سيكون لها تأثير أكثر شراسة على WordPress إلى جانب نظام WordPress البيئي الأوسع. يجب على هؤلاء عمومًا التعامل مع التحذيرات التي تصبح مشاكل. وقد تم إدخال العديد من الأخطاء ، والتي قد يكون من الصعب التعامل معها. يمكنك اكتشاف نسبة أعلى من هذه التغييرات في وقت التشغيل.
يعد إصلاح كل مشكلات التوافق هذه مهمة ضخمة. لتحقيق ذلك ، تحتاج إلى استخدام مجموعة متنوعة من الاستراتيجيات ، بدءًا من التحليل الثابت إلى الاختبار الآلي. يتطلب وقتًا + جهدًا كبيرًا.
يجب أن يكون لديك الحق في الأداة لإجراء كل شيء على أكمل وجه. بالنسبة لمشاريع مثل WordPress ، والتي يجب أن تدعم مجموعة متنوعة من إصدارات PHP ، يتم تقديم العديد من التعقيدات الإضافية في التوفيق بين الإصدارات المختلفة من أدوات التحليل ، كما ناقشنا أعلاه.
بالتأكيد ، يصبح الأمر صعبًا جدًا نظرًا لوقت التشغيل والاختلافات النحوية بين PHP 5 و 8 كونها ضخمة جدًا.
هل استخدام PHP 8 على WordPress جيد أم لا؟ في الواقع ليست الحجة هنا. الاستنتاج الوحيد هنا - يصبح من الصعب للغاية القيام بذلك.
أيضًا ، نظرنا في مسألة التغطية وتبعيات PHP في WordPress. إذا كنت ترغب في اكتشاف التوافق بشكل موثوق ، فإن التغطية الاختبارية العالية تثبت أنها ضرورية. وبالحديث عن PHP 8 ، فهو أكثر أهمية لأن عدد مشكلات التوافق أعلى من المعتاد. يمكن اكتشاف نسبة كبيرة منها في وقت التشغيل فقط.
لذا ، ماذا ننصح؟
إذا تم الكشف عن المشكلات ، يلزم إجراء تصحيح شامل للأخطاء للعثور على جذر المشكلة ، بغض النظر عن كونها WordPress أو Theme أو Plugin أو أنها مرتبطة مباشرة بتوافق PHP.
تغطية الاختبار غائبة تقريبًا عن التبعيات ومنخفضة. وبالتالي ، من الصعب توضيح ما هو التوافق الأساسي لـ WordPress مع PHP 8 بالمعنى الحقيقي للكلمة.
بسبب تركيز PHP 8 بشدة على الكتابة الصارمة ، يصبح نظام التوسعة غير الآمن من نوع WP أكثر عرضة للمشكلات ، مما قد يؤدي إلى إنشاء المكونات الإضافية لأخطاء الكتابة في المكونات الإضافية الأخرى أو WP نفسها.
قمنا باختبار هذا من خلال إجراء تحليل لبيانات الخطأ في الشهر الماضي. بصفتنا موقعًا ضخمًا ، فقد توصلنا إلى أنه قد يعطي مؤشرًا قويًا لأنواع المشاكل التي يمكن أن نتوقعها. بالتأكيد ، وجدنا العديد من التحذيرات التي ستتطور إلى أخطاء في PHP 8.
نفضل كتابة ملاحظة أخيرة هنا. WordPress ليس هو مصدر الكود الوحيد المتاح. كما أنه ليس المشروع الوحيد الذي يهدف إلى دعم مجموعة كبيرة من إصدارات PHP. قد تنطبق المعلومات الواردة في هذه المقالة بشكل جيد على مشاريع أخرى أيضًا.
الهدف الأساسي من هذه المقالة من Accuweb هو إعلام وتقديم نظرة عامة على التحديات والقضايا المتعلقة بتوافق PHP 8 في WP. نأمل بشدة أن يخدم هذا الغرض تمامًا.