Ultimate magazine theme for WordPress.

كيفية تحليل مشاريع PHP بشكل ثابت باستخدام PHPStan – CloudSavvy IT

5

شعار PHPStan

PHPStan هو نظام تحليل ثابت لمشاريع PHP. يعثر على أخطاء في قاعدة التعليمات البرمجية الخاصة بك عن طريق فحص الملفات المصدر. لست بحاجة إلى تشغيل التعليمات البرمجية الخاصة بك أو كتابة الاختبارات يدويًا لاكتشاف المشكلات!

يُعرَّف مصطلح “التحليل الثابت” على أنه كود تصحيح الأخطاء دون تنفيذه فعليًا. غالبًا ما يتم استخدامه مع اللغات المترجمة ، مثل PHP ، حيث تميل المشكلات التي يجدها إلى الظهور في مرحلة التجميع في اللغات المترجمة.

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

إضافة PHPStan إلى مشروعك

لتشغيل PHPStan ، ستحتاج إلى إصدار PHP 7.1 أو أحدث. ينطبق هذا المطلب فقط على إصدار PHP المستخدم لتنفيذ PHPStan نفسه. الأداة قادرة على تحليل ملفات المصدر التي تستهدف الإصدارات القديمة من PHP.

يوصى باستخدام Composer لإضافة PHPStan كاعتماد:

composer require --dev phpstan/phpstan

ستتم إضافة ثنائي PHPStan إلى مشروعك في vendor/bin/phpstan. يمكنك الآن استخدامه لتحليل قاعدة التعليمات البرمجية الخاصة بك لأول مرة:

vendor/bin/phpstan analyse src

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

تشغيل PHPStan ناجح

سترى علامة “[OK] لا توجد أخطاء “إذا نجحت جميع الاختبارات. خلاف ذلك ، سيتم عرض قائمة الأخطاء التي تمت مواجهتها. اتبع الإرشادات الموضحة لحل كل خطأ قبل إعادة تشغيل PHPStan.

أنواع ومستويات الخطأ

يتضمن PHPStan عددًا كبيرًا من الشيكات التي تغطي مجموعة متنوعة من مشكلات قاعدة البيانات المحتملة. تتضمن بعض أكثر الأشياء شيوعًا التي ستواجهها ما يلي:

  • اكتب مشاكل النظام – تعيين قيمة غير صالحة لخاصية مكتوبة ، أو تمرير معلمات تمت كتابتها بشكل غير صحيح إلى طريقة. يتضمن هذا أيضًا مشكلات العقد ، مثل فئة تقوم بتنفيذ واجهة بشكل غير صحيح.
  • دعوات الوظيفة – تمرير عدد كبير جدًا من المعلمات ، أو لا يكفي ، عند استدعاء دالة أو طريقة (على سبيل المثال 3 بدلاً من 4).
  • فئات وطرق ووظائف غير معروفة – محاولة استخدام شيء غير موجود في قاعدة البيانات.
  • الوصول إلى متغيرات غير محددة / محتملة غير محددة – محاولة استخدام متغير لم يتم تعريفه في نطاق معين ، أو متغير قد لا يكون له دائمًا قيمة ولكنه يُستخدم في سياق يُفترض فيه ذلك.
  • فحص الكود الميت – وضع علامة على التعليمات البرمجية غير المفيدة ، مثل المقارنات المنطقية التي ستحل دائمًا إلى نفس القيمة وفروع الكود التي لن يتم تنفيذها أبدًا (على سبيل المثال ، الكود الذي يتبع return بيان ضمن الوظائف).

يتم تصنيف القواعد إلى 9 “مستويات” مختلفة ، مصنفة من 0 إلى 8. المستوى الخاص max يعمل كاسم مستعار لأعلى مستوى ممكن. بمرور الوقت ، قد تضيف PHPStan مستويات عددية إضافية ، لذلك باستخدام max يضمن لك الحصول دائمًا على أدق الفحوصات الممكنة.

تشغيل PHPStan فاشل

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

لتغيير المستوى الذي يستخدمه PHPStan ، يمكنك تمرير ملف --level معلمة سطر الأوامر:

vendor/bin/phpstan analyse src --level 8

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

تكوين PHPStan

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

يستخدم PHPStan تنسيق ملف تكوين Neon ، والذي يحتوي على صيغة مشابهة جدًا لـ YAML. إنشاء phpstan.neon ملف في الدليل الجذر لمشروعك. يتم تحميل هذا الملف تلقائيًا عند بدء تشغيل PHPStan ، لذا يمكنك الآن تشغيل ملف analyse الأمر دون مزيد من الحجج:

vendor/bin/phpstan analyse

لتجاوز ملف التكوين المستخدم ، قم بتمرير الامتداد --configuration علم:

vendor/bin/phpstan analyse --configuration /phpstan-config.neon

أنت الآن بحاجة لملء الخاص بك phpstan.neon ملف مع بعض المحتوى. قد تبدو نقطة البداية الجيدة كما يلي:

parameters:
  level: 0
  paths:
    - src

يجب أن يعطي ملف التكوين الأساسي هذا نفس الإخراج مثل استدعاء سطر الأوامر الموضح سابقًا. يمكنك إضافة أدلة إضافية لمسحها كخطوط جديدة في ملف paths الجزء. لاستبعاد الملفات والدلائل ، قم بإضافتها إلى ملف excludes_analyse ورقة داخل نفسه parameters الجزء.

تجاهل الأخطاء

من حين لآخر ، قد تظهر PHPStan مشكلة لا مفر منها. إذا كانت هناك مشكلة لا يمكنك معالجتها على الفور ، فقد ترغب في تجاهلها صراحة للسماح باجتياز الاختبارات.

هذا مهم بشكل خاص عندما تريد الانتقال إلى مستوى آخر من عمليات الفحص ، أو إذا كنت تستخدم PHPStan في بيئة CI حيث سيؤدي التشغيل الفاشل إلى إيقاف نشر بنائك. ومع ذلك ، لا تأخذ هذا الإجراء على محمل الجد – يجب أن تختار فقط تجاهل الخطأ المبلغ عنه إذا كنت متأكدًا من أنه سيكون آمنًا للقيام بذلك.

بمجرد اتخاذ القرار ، أضف ملف ignoreErrors قسم داخل parameters من ملف التكوين الخاص بك. يجب عليك تحديد الرسالة المراد مطابقتها ، كتعبير عادي ، والمسارات لتطبيق الاستثناء على:

parameters:
  level: 0
  paths:
    - src
  ignoreErrors:
    - message: '/Return type string of method ExampleClass::example() is not covariant(.*).'
      path: src/ExampleClass.php

يمكنك اختياريا تحديد paths كمجموعة من المسارات ، لتحل محل واحد path المفتاح الموضح أعلاه.

قواعد اختيارية

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

تتضمن بعض الإعدادات التي قد تستحق التمكين ما يلي:

  • checkAlwaysTrueInstanceof – استخدامات الأعلام instanceof والذي سيتم تقييمه دائمًا لـ true.
  • checkAlwaysTrueStrictComparison – إشارات عند استخدام تعبير === أو !== سيقيم دائما ل true.
  • checkFunctionNameCase – يضمن تطابق غلاف أسماء الوظائف مع تعريفها عند استدعائها في جميع أنحاء قاعدة الكود.
  • polluteScopeWithLoopInitialAssignments – عند الضبط على false (انها true بشكل افتراضي) ، المتغيرات المعلنة في عبارات الحلقة الأولية (على سبيل المثال $i في $for ($i = 1; $i < 10; $i++)) من الوصول إليها خارج كتلة رمز الحلقة ، وتجنب التلوث المحتمل للنطاق الأصلي.
  • reportStaticMethodSignatures – يفرض التحقق من النوع الكامل للمعلمات وأنواع الإرجاع في الطرق الثابتة عند تجاوزها بواسطة فئة فرعية.

يمكن العثور على التفاصيل الكاملة حول هذه الإعدادات الاختيارية – وغيرها الكثير – في مرجع تكوين PHPStan.

استنتاج

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

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

اترك رد

لن يتم نشر عنوان بريدك الإلكتروني.