นี่คือชุดการดมกลิ่นสำหรับ 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 sniffs
ห้องสมุดนี้ได้รับการจัดระเบียบใหม่ การดมกลิ่นทั้งหมดถูกจัดอยู่ในหมวดหมู่ และดมกลิ่นจำนวนมากได้ถูกเปลี่ยนชื่อแล้ว
หากคุณใช้มาตรฐาน 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, zipped/tarred release archives หรือการตรวจสอบพื้นที่เก็บข้อมูลโดยใช้ Git
เคล็ดลับจากมืออาชีพ: ลงทะเบียนพาธไปยัง PHPCS ในระบบของคุณ $PATH
ตัวแปรสภาพแวดล้อม เพื่อให้คำสั่ง phpcs
พร้อมใช้งานจากทุกที่ในระบบไฟล์ของคุณ
ดาวน์โหลด PHPCompatibility รุ่นล่าสุด และแตกไฟล์/untar ลงในไดเร็กทอรีที่กำหนดเอง
คุณยังสามารถเลือกที่จะโคลนพื้นที่เก็บข้อมูลโดยใช้ 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ตั้งแต่กลางปี 2018 ชุดกฎเฉพาะของเฟรมเวิร์ก/CMS จะพร้อมใช้งานอย่างจำกัด ชุดกฎเหล่านี้โฮสต์อยู่ในที่เก็บของตนเอง
PHPCompatibilityJoomla
Joomla GitHub | คนบรรจุหีบห่อPHPCompatibilityWP
WP GitHub | คนบรรจุหีบห่อตั้งแต่ฤดูใบไม้ร่วงปี 2018 เป็นต้นมา ยังมีชุดกฎเฉพาะ PHP polyfill จำนวนหนึ่งให้เลือกใช้:
PHPCompatibilityPasswordCompat
Compat GitHub | Packagist: บัญชีสำหรับไลบรารี polyfill password_compat
ของ @ircmaxell ของ @ircmaxellPHPCompatibilityParagonie
GitHub | Packagist: ประกอบด้วยชุดกฎสองชุดซึ่งอธิบายถึงไลบรารี Paragonie random_compat
และ sodium_compat
Polyfill ตามลำดับPHPCompatibilitySymfony
GitHub | Packagist: ประกอบด้วยชุดกฎจำนวนหนึ่งซึ่งอธิบายไลบรารี PHP polyfill ต่างๆ ที่นำเสนอโดยโครงการ Symfony สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับชุดกฎที่มีอยู่ โปรดตรวจสอบ README ของพื้นที่เก็บข้อมูล 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- " />
แน่นอนว่าตัวเลือกขั้นสูงอื่นๆ เช่น การเปลี่ยนประเภทข้อความหรือความรุนแรงของการดมกลิ่นที่เลือก ดังที่อธิบายไว้ในหน้าวิกิชุดกฎที่มีคำอธิบายประกอบของ PHPCS ก็ได้รับการสนับสนุนเช่นกัน
testVersion
ในชุดกฎเทียบกับบรรทัดคำสั่ง ใน PHPCS 3.2.0 และต่ำกว่า เมื่อคุณตั้ง testVersion
ในชุดกฎ คุณจะไม่สามารถลบล้างจากบรรทัดคำสั่งได้อีกต่อไป ตั้งแต่ PHPCS 3.3.0 เป็นต้นไป testVersion
ที่ตั้งค่าผ่านบรรทัดคำสั่งจะลบล้าง testVersion
ในชุดกฎ
ซึ่งช่วยให้มีความยืดหยุ่นมากขึ้น เช่น เมื่อโปรเจ็กต์ของคุณจำเป็นต้องสอดคล้องกับ PHP 5.5-
แต่คุณมีไฟล์บูทสแตรปซึ่งจำเป็นต้องเข้ากันได้กับ PHP 5.2-
ในขณะนี้ มีสอง sniffs ที่มีคุณสมบัติที่สามารถตั้งค่าผ่านชุดกฎได้ คุณสมบัติที่กำหนดเองเพิ่มเติมอาจมีให้ใช้งานในอนาคต
PHPCompatibility.Extensions.RemovedExtensions
จะตรวจสอบส่วนขยายที่ถูกลบออกตามคำนำหน้าฟังก์ชันที่ใช้สำหรับส่วนขยายเหล่านี้ สิ่งนี้อาจขัดแย้งกับฟังก์ชัน userland โดยใช้คำนำหน้าฟังก์ชันเดียวกัน
หากต้องการเพิ่มฟังก์ชันพื้นที่ผู้ใช้ลงในไวท์ลิสต์ คุณสามารถส่งรายการชื่อฟังก์ชันที่คั่นด้วยเครื่องหมายจุลภาคไปยังรายการ Sniff ได้
<!-- 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 หรือขยายเพิ่มเติม รายการสั้น ๆ ที่คุณอาจรู้หรือดู:
ยินดีเป็นอย่างยิ่ง โปรดอ่านเอกสารประกอบเพื่อเริ่มต้น
รหัสนี้เผยแพร่ภายใต้ GNU Lesser General Public License (LGPL) สำหรับข้อมูลเพิ่มเติม โปรดไปที่ http://www.gnu.org/copyleft/lesser.html