إصدار المزمور 3.12، وهو محلل ثابت للغة PHP. إصدار ألفا PHP 8.0

شركة فيميو опубликовала الإصدار الجديد من محلل ثابت مزمور 3.12، والذي يسمح لك بتحديد الأخطاء الواضحة والدقيقة في كود PHP، بالإضافة إلى تصحيح بعض أنواع الأخطاء تلقائيًا. النظام مناسب لتحديد المشكلات سواء في التعليمات البرمجية القديمة أو في التعليمات البرمجية التي تستخدم الميزات الحديثة المقدمة في الفروع الجديدة لـ PHP. كود المشروع مكتوب بلغة PHP و وزعت من خلال بموجب ترخيص معهد ماساتشوستس للتكنولوجيا.

يحدد المزمور معظم المشاكل المرتبطة بالاستخدام غير الصحيح للنوع، بالإضافة إلى مشاكل مختلفة أخطاء نموذجية. على سبيل المثال، يدعم التحذيرات بشأن خلط متغيرات من أنواع مختلفة في تعبير، واختبارات منطقية غير صحيحة (مثل "if ($a && $a) {}"، و"if ($a && !$a) {}" و" إذا ( $a) {} elseif ($a) {}")، تهيئة غير كاملة لخصائص الكائن. يعمل المحلل في وضع متعدد الخيوط. من الممكن إجراء عمليات فحص تزايدية، والتي تحلل فقط الملفات التي تغيرت منذ آخر عملية فحص.

بالإضافة إلى ذلك، يتم توفير أدوات البرمجة الآمنة للسماح استخدم التعليقات التوضيحية في الشكل دوكبلوك ("/** @var Type */") لتوفير معلومات حول أنواع المتغيرات، وقيم الإرجاع، ومعلمات الوظائف، وخصائص الكائن. يتم أيضًا دعم تحديد أنماط استخدام النوع واستخدام عبارات التأكيد. على سبيل المثال:

/** @var string|null */
$a = foo();

/** @var سلسلة $a */
صدى strpos($a, 'hello');

/** @psalm-assert-if-true B $a */
الدالة صالحةB(A $a) : منطقي {
إرجاع $a مثيل B && $a->isValid();
}

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

في العدد الجديد من المزمور مُنفّذ يتيح لك خيار "--taint-ana Analysis" تتبع العلاقة بين معلمات الإدخال المستلمة من المستخدم (على سبيل المثال، $_GET['name']) واستخدامها في الأماكن التي تتطلب هروب الأحرف (على سبيل المثال، echo " اسم $ ")، بما في ذلك من خلال سلاسل تتبع المهام الوسيطة واستدعاءات الوظائف. يعتبر استخدام المصفوفات الترابطية $_GET و$_POST و$_COOKIE بمثابة مصادر للبيانات التي يحتمل أن تكون خطيرة، ولكنه من الممكن أيضًا تحديد المصادر الخاصة. تتضمن الإجراءات التي تتطلب الهروب من التتبع عمليات الإخراج التي تنشئ محتوى HTML، أو تضيف رؤوس HTTP، أو تنفذ استعلامات SQL.

يتم استخدام التحقق من الصحة عند استخدام وظائف مثل echo وexec وinclude وheader. عند تحليل الحاجة إلى الهروب، يتم أخذ أنواع البيانات مثل النص والسلاسل ذات كود SQL وHTML وShell والسلاسل ذات معلمات المصادقة في الاعتبار. يتيح لك الوضع المقترح تحديد نقاط الضعف في التعليمات البرمجية التي تؤدي إلى البرمجة النصية عبر المواقع (XSS) أو استبدال SQL.

بالإضافة إلى ذلك ، يمكن ملاحظته بداية اختبار ألفا لفرع PHP 8.0 الجديد. ومن المقرر الإصدار في 26 نوفمبر. ومن المتوقع في الفرع الجديد ما يلي: الابتكاراتعلى النحو التالي:

  • السلطة حتى مترجم JITوالتي سيؤدي استخدامها إلى تحسين الإنتاجية.
  • Поддержка أنواع الاتحاد، تحديد مجموعات من نوعين أو أكثر (على سبيل المثال، "الوظيفة العامة foo(Foo|Bar $input): int|float;").
  • Поддержка صفات (التعليقات التوضيحية) التي تسمح لك بربط البيانات التعريفية (مثل معلومات النوع) بالفئات دون استخدام بناء جملة Docblock.
  • بناء الجملة المختصرة تعريفات الفئة، مما يسمح لك بالجمع بين تعريف المنشئ والخصائص.
  • نوع الإرجاع الجديد - ساكن.
  • نوع جديد - مختلط، والتي يمكن استخدامها لتحديد ما إذا كانت الوظيفة تقبل معلمات من أنواع مختلفة.
  • التعبير رمي للتعامل مع الاستثناءات.
  • خريطة ضعيفة لإنشاء كائنات يمكن التضحية بها أثناء جمع البيانات المهملة (على سبيل المثال، لتخزين ذاكرة التخزين المؤقت غير الضرورية).
  • فرصة استخدام التعبير "::class" للكائنات (مشابه لاستدعاء get_class()).
  • فرصة التعريفات في كتلة الالتقاط للاستثناءات غير المرتبطة بالمتغيرات.
  • فرصة ترك فاصلة بعد العنصر الأخير في قائمة معلمات الوظيفة.
  • واجهة جديدة قابل للتثبيت لتحديد أي أنواع سلسلة أو بيانات يمكن تحويلها إلى سلسلة (والتي تتوفر لها طريقة __toString()).
  • ميزة جديدة str_contains ()، وهو نظير مبسط لـ strpos لتحديد حدوث سلسلة فرعية، بالإضافة إلى الدالتين str_starts_with() وstr_ends_with() للتحقق من التطابقات في بداية ونهاية السلسلة.
  • تمت إضافة الميزة فديف ()والتي تنفذ عملية القسمة دون حدوث خطأ عند القسمة على صفر.
  • تغير منطق ربط السلسلة على سبيل المثال، التعبير 'echo "sum:" . تم تفسير $a + $b' سابقًا على أنه "echo" ("sum: " . $a) + $b'، وفي PHP 8 سيتم التعامل معه على أنه "echo "sum: " . ((أ + $ب)'.
  • تشديد التحقق من العمليات الحسابية والبت، على سبيل المثال، التعبيرات "[] % [42]" و"$object + 4" ستؤدي إلى حدوث خطأ.
  • مُنفّذ خوارزمية فرز مستقرة يتم فيها الحفاظ على ترتيب القيم المتطابقة عبر عمليات تشغيل مختلفة.

المصدر: opennet.ru

إضافة تعليق