هذه مجموعة من شم PHP_CODESNIFFER المخصص (3.x) لاكتشاف الأخطاء المحتملة والسلوك غير المتوقع في رمز PHP. يمكن استخدامها كمجموعة قواعد من تلقاء نفسها ، ولكنها تهدف بشكل أساسي كمجموعة من شم منفصلة يمكن دمجها في معايير أخرى.
وصفنا الدافع وراء بعض هذه الشم على مدونتنا.
التثبيت كاعتماد على التطوير باستخدام الملحن:
$ composer require --dev moxio/php-codesniffer-sniffs
تحقق من ملفاتك مقابل هذه المجموعة من الشم:
$ ./vendor/bin/phpcs --standard=vendor/moxio/php-codesniffer-sniffs/MoxioSniffs path/to/your/files
سيتم إضافة المزيد من الشم قريبًا.
moxiosniffs.php.disallowbareContinueInswitch : لا يسمح ببيان continue بدون وسيطة رقمية عند استخدامها case داخل switch . هذا يمنع الأخطاء الصامتة الناجمة عن PHP مع الأخذ في الاعتبار أن switch هو بنية حلقة.
moxiosniffs.php.disallyimplicitloocomparison : لا يدعو المقارنات الضمنية غير الشريطية عن طريق وظائف مثل in_array و array_search . يتطلب أن يتم تعيين المعقد $strict لهذه الوظائف بشكل صريح. هذا يمنع الحشرات المخفية بسبب السلوك المضاد للبديه للمقارنة غير الشريطية.
moxiosniffs.php.disallyimplictloOseBase64Decode : لا يسيطر على الاستخدام غير الضمني لدالة base64_decode . يتطلب أن يتم تعيين المعقد $strict لهذه الوظيفة بشكل صريح.
moxiosniffs.php.disallowuniqidwithoutmoreentRopy : لا يدعو المكالمات إلى uniqid() بدون $more_entropy = true . عندما يكون $more_entropy false (وهو الافتراضي) ، يدعو uniqid() usleep() لتجنب الاصطدامات ، والتي يمكن أن تكون بمثابة ضربة كبيرة. الاتصال دائمًا uniqid() باستخدام $more_entropy = true يتجنب هذه المشكلات.
moxiosniffs.php.disallowArrayCombinersWithingLearray : لا يسمح المسموح بالاتصالات إلى الوظائف التي تجمع بين صفيفتين أو أكثر مع صفيف واحد فقط كحجة. ينطبق هذا على وظائف مثل array_merge(_recursive) ، array_replace(_recursive) وجميع المتغيرات من array_diff و array_intersect . مثل هذه الدعوة لا معنى لها ، وعلى الأرجح نتيجة لفاصلة أو قوسين في غير محله. لإعادة الفهرس صفيف واحد ، ما عليك سوى استخدام array_values .
moxiosniffs.php.disallyimplicitmicrotimeasString : لا يدعو المكالمات إلى microtime() دون تعيين وسيطة $get_as_float بشكل صريح. بشكل افتراضي ، لدى microtime سلسلة مثل قيمة الإرجاع ("MSEC SEC") ، وهي غير متوقعة ولا يمكن إلقاؤها بسذاجة لتطفو ، مما يجعلها معرضة للخطأ. لا يزال من الممكن تعيين هذه الوسيطة على false ، ولكن في هذه الحالة ربما فكرت في هذا الأمر.
moxiosniffs.php.disallyImplicitiTiTerAratorToRayWithuseKeys : لا تسمح المكالمات إلى iterator_to_array() دون تعيين وسيطة $use_keys بشكل صريح. بشكل افتراضي ، يستخدم iterator_to_array المفاتيح التي يوفرها المتكرر. غالبًا ما يكون هذا السلوك مطلوبًا للصفائف الترابطية ، ولكنه يمكن أن يسبب نتائج غير متوقعة للمصفوفات "الشبيهة بالقائمة". يضمن الطلب بشكل صريح تحديد المعلمة على أن على المطور التفكير في السلوك المطلوب للموقف المطروح.
moxiosniffs.php.disallowDateTime : لا يمكن استخدام استخدام DateTime ويعزز استخدام DateTimeImmutable بدلاً من ذلك. السابق يمكن أن يؤدي إلى بعض الحشرات الخفية ولكن سيئة. انظر هذا المنشور لمزيد من الخلفية حول سبب رغبتك في التثبيط باستخدام DateTime .
moxiosniffs.php.disallowmbdetectencoding : لا يسمح استخدام mb_detect_encoding . تحتوي هذه الوظيفة على اسم مضلل يعني أنها يمكن أن تكتشف بالفعل ترميز السلسلة ، وهي مشكلة مستحيلة بشكل عام. بدلاً من ذلك ، يتحقق من قائمة الترميزات حتى يجد قائمة يمكن أن تكون هي القائمة الصحيحة (أي أن السلسلة هي تسلسل بايت صالح وفقًا لهذا الترميز). باستخدام mb_check_encoding (ربما في حلقة) بدلاً من ذلك يجعل هذا أكثر وضوحًا. شاهد هذا الحديث لمزيد من المعلومات الأساسية حول هذا الموضوع.
moxiosniffs.php.disallyutf8encodedecode : لا يدعو المكالمات إلى utf8_encode() و utf8_decode() . يمكن اعتبار هذه الوظائف مضللة لأنها تتحول فقط إلى/من ISO-8859-1 ، ولا تكتشف "سحريًا" ترميز المصدر/الهدف. باستخدام iconv() أو mb_convert_encoding() بدلاً من ذلك ، يجعل كلا ترميزات الأحرف تلعب دورًا في التحويل بشكل صريح.
moxiosniffs.php.disallowdatecreatefromformatwithUnspecifiedTimeComponent : لا تسمح المكالمات إلى DateTime::createFromFormat date_create_from_format date_create_immutable_from_format DateTimeImmutable::createFromFormat هذا من شأنه أن ينشئ كائنات DateTime (غير قابلة للتغيير) مع مكون زمني تم تعيينه على وقت (الإنشاء) الحالي ، والذي ربما لا يكون ما تريده أبدًا ويمكن أن يكون مصدرًا للخداع.
بعد تثبيت التبعيات (بما في ذلك تبعيات التنمية) باستخدام الملحن ، قم بتشغيل
$ ./vendor/bin/phpunit
من مشروع الجذر دير.
يلتزم هذا المشروع بالإصدار الدلالي.
يرجى ملاحظة أنه من منظور هذه المكتبة كمجموعة من شم الشم (وليس معيارًا ترميزًا كاملًا) ، لن يتم اعتبار إضافة شم جديدة تغييرًا فائقة ، وبالتالي لا تسبب زيادة في رقم الإصدار الرئيسي.
يتم إصدار هذه الشم تحت رخصة معهد ماساتشوستس للتكنولوجيا.