

هذه مجموعة من أدوات التعرف على PHP CodeSniffer التي تتحقق من توافق PHP مع الإصدارات المشتركة. سيسمح لك بتحليل التعليمات البرمجية الخاصة بك للتأكد من توافقها مع الإصدارات الأعلى والأدنى من PHP.
testVersion في مجموعة القواعد مقابل سطر الأوامريهدف المشروع إلى تغطية جميع تغييرات توافق PHP التي تم إدخالها منذ PHP 5.0 وحتى أحدث إصدار PHP. هذه عملية مستمرة والتغطية لم تصل بعد إلى نسبة 100% (إذا كان من الممكن أن تصل بالفعل). يتم تتبع التقدم من خلال متتبع مشكلات GitHub الخاص بنا.
نرحب بشدة بطلبات السحب التي تتحقق من مشكلات التوافق في كود PHP 4 - وخاصة بين PHP 4 وPHP 5.0 - حيث لا تزال هناك مواقف يحتاج فيها الأشخاص إلى مساعدة في ترقية الأنظمة القديمة. ومع ذلك، ستظل تغطية التغييرات التي تم إدخالها قبل PHP 5.1 غير مكتملة، حيث لم يتم تطوير عمليات الرصد الخاصة بهذا بشكل نشط في الوقت الحالي.
تم تصميم عمليات الاستنشاق لتعطي نفس النتائج بغض النظر عن إصدار PHP الذي تستخدمه لتشغيل PHP CodeSniffer. يجب أن تحصل على نتائج متسقة بشكل مستقل عن إصدار PHP المستخدم في بيئة الاختبار الخاصة بك، على الرغم من أنه للحصول على أفضل النتائج يوصى بتشغيل عمليات الرصد على إصدار PHP حديث مع إصدار PHP_CodeSniffer حديث.
اعتبارًا من الإصدار 8.0.0، يمكن أيضًا استخدام معيار PHPCompatibility مع PHP CodeSniffer 3.x. اعتبارًا من الإصدار 9.0.0، تم إسقاط دعم PHP CodeSniffer 1.5.x والإصدارات المنخفضة 2.x < 2.3.0. اعتبارًا من الإصدار 10.0.0، تم إسقاط دعم PHP <5.4 وPHP CodeSniffer <3.10.0.
شكرا لجميع المساهمين على مساهماتهم القيمة.
شكرًا لـ WP Engine لدعمهم في PHP 7.0.
تم إعادة تنظيم هذه المكتبة. تم وضع جميع الشمات في فئات وتمت إعادة تسمية عدد كبير من الشمات.
إذا كنت تستخدم معيار PHPCompatibility الكامل دون exclude التوجيهات في مجموعة قواعد مخصصة ولم تستخدم (حتى الآن) النمط الجديد للتعليق التوضيحي PHP_CodeSniffer كما تم تقديمه في PHP_CodeSniffer 3.2.0، فلن يكون لهذا تأثير ملحوظ ويجب أن يعمل كل شيء كما كان من قبل.
ومع ذلك، إذا كنت تستخدم توجيهات exclude لأدوات PHPCompatibility في مجموعة قواعد مخصصة أو إذا كنت تستخدم التعليقات التوضيحية المضمنة ذات النمط الجديد PHP_CodeSniffer، فستحتاج إلى تحديثها عند الترقية. يجب أن يكون هذا التغيير لمرة واحدة فقط. يحتوي سجل التغيير على معلومات تفصيلية حول كافة عمليات إعادة التسمية.
يرجى قراءة سجل التغيير للإصدار 9.0.0 بعناية قبل الترقية.
require-dev في ملف composer.json الخاص بك. "require-dev" : {
"phpcompatibility/php-compatibility" : " * "
},
"prefer-stable" : true إذا كان PHPCompatibility هو معيار PHP CodeSniffer الخارجي الوحيد الذي تستخدمه، فيمكنك إضافة ما يلي إلى ملف composer.json الخاص بك لتشغيل الأمر الضروري تلقائيًا:
"scripts" : {
"post-install-cmd" : " " vendor/bin/phpcs " --config-set installed_paths vendor/phpcompatibility/php-compatibility " ,
"post-update-cmd" : " " vendor/bin/phpcs " --config-set installed_paths vendor/phpcompatibility/php-compatibility "
}بدلاً من ذلك - ويوصى به بشدة إذا كنت تستخدم أكثر من معيار PHP CodeSniffer خارجي - يمكنك استخدام أي من مكونات Composer الإضافية التالية للتعامل مع هذا الأمر نيابةً عنك.
ما عليك سوى إضافة المكون الإضافي Composer الذي تفضله إلى قسم require-dev في ملف composer.json الخاص بك.
كبديل أخير في حالة استخدام مجموعة قواعد مخصصة، يمكنك إخبار PHP CodeSniffer بالمسار إلى معيار PHPCompatibility عن طريق إضافة المقتطف التالي إلى مجموعة القواعد المخصصة الخاصة بك:
< config name = " installed_paths " value = " vendor/phpcompatibility/php-compatibility " />composer update --lock لتثبيت كل من PHP CodeSniffer ومعيار ترميز PHPCompatibility و- بشكل اختياري - المكون الإضافي Composer../vendor/bin/phpcs -i في سطر الأوامر. يجب إدراج PHPCompatibility كأحد المعايير المتاحة../vendor/bin/phpcs -p . --standard=PHPCompatibilityقم بتثبيت PHP CodeSniffer عبر طريقتك المفضلة.
يقدم PHP CodeSniffer مجموعة متنوعة من طرق التثبيت التي تناسب سير عملك: Composer، أو PEAR، أو ملف Phar، أو أرشيفات الإصدار المضغوطة/المقطرة، أو التحقق من المستودع باستخدام Git.
نصيحة احترافية: قم بتسجيل المسار إلى PHPCS في متغير بيئة $PATH لنظامك لجعل أمر phpcs متاحًا من أي مكان في نظام الملفات لديك.
قم بتنزيل أحدث إصدار من PHPCompatibility وقم بفك ضغطه/فك ضغطه في دليل عشوائي.
يمكنك أيضًا اختيار استنساخ المستودع باستخدام git لتحديث التثبيت بانتظام بسهولة.
أضف المسار إلى الدليل الذي وضعت فيه نسختك من PHPCompatibility repo إلى تكوين PHP CodeSniffer باستخدام الأمر أدناه من سطر الأوامر:
phpcs --config-set installed_paths /path/to/PHPCompatibility على سبيل المثال، إذا قمت بوضع مستودع PHPCompatibility في الدليل /my/custom/standards/PHPCompatibility ، فستحتاج إلى إضافة هذا الدليل إلى متغير التكوين PHP CodeSniffer installed_paths .
تحذير :installed_paths بالكتابة فوق أي installed_paths مثبت مسبقًا. إذا قمت مسبقًا بتعيين installed_paths لمعايير خارجية أخرى، فقم بتشغيل phpcs --config-show أولاً ثم قم بتشغيل الأمر installed_paths مع فصل جميع المسارات التي تحتاجها بفواصل، على سبيل المثال:
phpcs --config-set installed_paths /path/1,/path/2,/path/3نصيحة احترافية: بدلاً من ذلك، في حالة استخدام مجموعة قواعد مخصصة، يمكنك إخبار PHP CodeSniffer بالمسار إلى معيار (معايير) PHPCompatibility عن طريق إضافة المقتطف التالي إلى مجموعة القواعد المخصصة الخاصة بك:
< config name = " installed_paths " value = " /path/to/PHPCompatibility " /> تحقق من تسجيل معيار PHPCompatibility بشكل صحيح عن طريق تشغيل phpcs -i في سطر الأوامر. يجب إدراج PHPCompatibility كأحد المعايير المتاحة.
يمكنك الآن استخدام الأمر التالي لفحص الكود الخاص بك:
phpcs -p . --standard=PHPCompatibilityphpcs -p . --standard=PHPCompatibility .testVersion للتحقق منه. سيؤدي ذلك إلى تمكين عمليات التحقق من ميزات PHP المهملة/المحذوفة بالإضافة إلى اكتشاف التعليمات البرمجية باستخدام ميزات PHP الجديدة.--runtime-set testVersion 5.5 إلى أمر سطر الأوامر الخاص بك.--runtime-set testVersion 5.3-5.5 .--runtime-set testVersion 7.0- لتشغيل جميع عمليات التحقق لـ PHP 7.0 وما فوق.--report-full=path/to/report-file . لمزيد من المعلومات وخيارات إعداد التقارير الأخرى، راجع موقع PHP CodeSniffer wiki.اعتبارًا من منتصف عام 2018، تتوفر مجموعة محدودة من مجموعات القواعد المحددة لإطار العمل/نظام إدارة المحتوى. تتم استضافة مجموعات القواعد هذه في مستودعاتها الخاصة.
PHPCompatibilityJoomla جوملا جيثب | التعبئة والتغليفPHPCompatibilityWP جيثب | التعبئة والتغليفمنذ خريف عام 2018، هناك أيضًا عدد من قواعد PHP polyfill المحددة المتاحة:
PHPCompatibilityPasswordCompat جيثب | Packagist: حسابات لمكتبة polyfill الخاصة بـ password_compat @ircmaxell.PHPCompatibilityParagonie جيثب | Packagist: يحتوي على مجموعتي قواعد تمثلان مكتبات Paragonie random_compat و sodium_compat polyfill على التوالي.PHPCompatibilitySymfony جيثب | Packagist: يحتوي على عدد من مجموعات القواعد التي تمثل مكتبات PHP polyfill المتنوعة التي يقدمها مشروع Symfony. لمزيد من التفاصيل حول مجموعات القواعد المتاحة، يرجى مراجعة الملف التمهيدي الخاص بمستودع PHPCompatibilitySymfony. إذا كنت تريد التأكد من توفر كافة قواعد PHPCompatibility في أي وقت، فيمكنك استخدام حزمة PHPCompatibilityAll GitHub | التعبئة والتغليف.
هام: لا تحدد مجموعات القواعد المحددة Framework/CMS/Polyfill الحد الأدنى لإصدار PHP لمشروعك، لذلك ستظل بحاجة إلى اجتياز testVersion للحصول على النتائج الأكثر دقة.
كما هو الحال مع أي معيار PHP CodeSniffer، يمكنك إضافة PHPCompatibility إلى مجموعة قواعد PHP CodeSniffer المخصصة.
<? xml version = " 1.0 " ?>
< ruleset name = " Custom ruleset " >
< description >My rules for PHP CodeSniffer</ description >
<!-- Run against the PHPCompatibility ruleset -->
< rule ref = " PHPCompatibility " />
<!-- Run against a second ruleset -->
< rule ref = " PSR2 " />
</ ruleset > يمكنك أيضًا تعيين testVersion من داخل مجموعة القواعد:
<!-- Check for cross-version support for PHP 5.6 and higher. -->
< config name = " testVersion " value = " 5.6- " />الخيارات المتقدمة الأخرى، مثل تغيير نوع الرسالة أو خطورة عمليات الاستنشاق المحددة، كما هو موضح في صفحة Wiki الخاصة بمجموعة قواعد PHPCS Annotated، مدعومة أيضًا بالطبع.
testVersion في مجموعة القواعد مقابل سطر الأوامر في PHPCS 3.2.0 والإصدارات الأقدم، بمجرد تعيين testVersion في مجموعة القواعد، لن تتمكن من إبطاله من سطر الأوامر بعد الآن. بدءًا من PHPCS 3.3.0، فإن testVersion الذي تم تعيينه عبر سطر الأوامر سوف يلغي testVersion في مجموعة القواعد.
يتيح ذلك المزيد من المرونة، على سبيل المثال، عندما يحتاج مشروعك إلى التوافق مع PHP 5.5- ، ولكن لديك ملف تمهيد يجب أن يكون متوافقًا مع PHP 5.2- .
في هذه اللحظة، هناك نوعان من الشمات لهما خاصية يمكن تعيينها عبر مجموعة القواعد. قد تصبح المزيد من الخصائص المخصصة متاحة في المستقبل.
يقوم PHPCompatibility.Extensions.RemovedExtensions بالتحقق من الامتدادات التي تمت إزالتها بناءً على بادئة الوظيفة المستخدمة لهذه الامتدادات. قد يتعارض هذا مع وظائف userland باستخدام نفس بادئة الوظيفة.
لإدراج وظائف أرض المستخدم في القائمة البيضاء، يمكنك تمرير قائمة مفصولة بفواصل بأسماء الوظائف إلى أداة الشم.
<!-- Whitelist the mysql_to_rfc3339() and mysql_another_function() functions. -->
< rule ref = " PHPCompatibility.Extensions.RemovedExtensions " >
< properties >
< property name = " functionWhitelist " type = " array " value = " mysql_to_rfc3339,mysql_another_function " />
</ properties >
</ rule > يحتاج PHPCompatibility.Interfaces.RemovedSerializable sniff إلى معرفة جميع الواجهات التي تعمل على توسيع الواجهة Serializable لتوفير النتائج الأكثر موثوقية. سوف يحذر الشم عندما يواجه واجهة توسع الواجهة Serializable والتي تكون غير معروفة للشم ويوصي بإضافة اسم الواجهة إلى الخاصية.
لإعلام التعرّف على الواجهات الإضافية التي توفر الواجهة القابلة للتسلسل، أضف مقتطفًا على غرار ما يلي إلى مجموعة القواعد المخصصة الخاصة بك:
< rule ref = " PHPCompatibility.Interfaces.RemovedSerializable " >
< properties >
< property name = " serializableInterfaces " type = " array " >
< element value = " MyCustomSerializableInterface " />
< element value = " AnotherSerializableInterface " />
</ property >
</ properties >
</ rule >هناك المئات من المشاريع العامة التي تستخدم PHPCompatibility أو تتوسع فوقها. قائمة قصيرة ببعض الأشياء التي قد تعرفها أو تلقي نظرة عليها:
المساهمات هي موضع ترحيب كبير. يرجى قراءة وثائق المساهمة للبدء.
تم إصدار هذا الرمز بموجب رخصة جنو العمومية الصغرى (LGPL). لمزيد من المعلومات، قم بزيارة http://www.gnu.org/copyleft/lesser.html