هذه مجموعة من أدوات التعرف على 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=PHPCompatibility
phpcs -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