這是 PHP CodeSniffer 的一組嗅探器,用於檢查 PHP 跨版本相容性。它將允許您分析程式碼與更高版本和更低版本 PHP 的兼容性。
testVersion
與命令列該專案旨在涵蓋自 PHP 5.0 到最新 PHP 版本以來引入的所有 PHP 相容性變更。這是一個持續的過程,覆蓋率尚未達到 100%(如果確實可以的話)。我們的 GitHub 問題追蹤器可以追蹤進度。
檢查 PHP 4 程式碼中的相容性問題(特別是 PHP 4 和 PHP 5.0 之間)的 Pull 請求非常受歡迎,因為在某些情況下人們仍然需要協助升級舊系統。然而,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.3.0 的低 2.x 版本的支援已被刪除。從版本 10.0.0 開始,已刪除對 PHP < 5.4 和 PHP CodeSniffer < 3.10.0 的支援。
感謝所有貢獻者的寶貴貢獻。
感謝 WP Engine 對 PHP 7.0 嗅探的支持。
該圖書館已被重組。所有嗅探都已分類,大量嗅探已重命名。
如果您在自訂規則集中使用完整的PHPCompatibility
標準,而沒有exclude
指令,並且(尚未)使用PHP_CodeSniffer 3.2.0 中引入的新型PHP_CodeSniffer 註釋,則這不會產生明顯的效果,並且一切都應該像以前一樣工作。
但是,如果您確實在自訂規則集中使用 PHPCompatibility 嗅探的exclude
指令,或使用新型 PHP_CodeSniffer 內嵌註釋,則在升級時需要更新這些註釋。這應該是一次性的改變。變更日誌包含有關所有嗅探重命名的詳細資訊。
升級前請仔細閱讀 9.0.0 版本的變更日誌。
composer.json
檔案的require-dev
部分。 "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 外掛程式新增至composer.json
檔案的require-dev
部分即可。
作為使用自訂規則集的最後一種選擇,您可以透過將下列程式碼片段新增至自訂規則集來告訴 PHP CodeSniffer PHPCompatibility 標準的路徑:
< config name = " installed_paths " value = " vendor/phpcompatibility/php-compatibility " />
composer update --lock
以安裝 PHP CodeSniffer、PHPCompatibility 編碼標準和(選購)Composer 外掛程式。./vendor/bin/phpcs -i
驗證 PHPCompatibility 標準是否已正確註冊。 PHPCompatibility 應被列為可用標準之一。./vendor/bin/phpcs -p . --standard=PHPCompatibility
透過您喜歡的方法安裝 PHP CodeSniffer。
PHP CodeSniffer 提供了多種安裝方法來適應您的工作流程:Composer、PEAR、Phar 檔案、壓縮/焦油發布檔案或使用 Git 檢查儲存庫。
專業提示:在系統$PATH
環境變數中註冊 PHPCS 的路徑,以使phpcs
指令可以從檔案系統中的任何位置使用。
下載最新的 PHPCompatibility 版本並將其解壓縮到任何目錄。
您也可以選擇使用 git 克隆儲存庫,以便定期輕鬆更新您的安裝。
使用命令列中的以下命令,將放置 PHPCompatibility 儲存庫副本的目錄路徑新增至 PHP CodeSniffer 設定中:
phpcs --config-set installed_paths /path/to/PHPCompatibility
即,如果您將PHPCompatibility
儲存庫放置在/my/custom/standards/PHPCompatibility
目錄中,則需要將該目錄新增至 PHP installed_paths
ths 設定變數中。
警告: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 " />
透過在命令列上執行phpcs -i
驗證 PHPCompatibility 標準是否已正確註冊。 PHPCompatibility 應被列為可用標準之一。
現在您可以使用以下命令來檢查您的程式碼:
phpcs -p . --standard=PHPCompatibility
phpcs -p . --standard=PHPCompatibility
。testVersion
來檢查。這將啟用對已棄用/刪除的 PHP 功能的檢查以及使用新 PHP 功能的程式碼檢測。--runtime-set testVersion 5.5
新增至命令列命令來僅執行針對一個特定 PHP 版本的檢查。--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 年中期,提供了一組有限的框架/CMS 特定規則集。這些規則集託管在它們自己的儲存庫中。
PHPCompatibilityJoomla
GitHub | PHPCompatibilityJoomla包裝學家PHPCompatibilityWP
GitHub | PHP相容性WP包裝學家自 2018 年秋季以來,還有許多 PHP polyfill 特定規則集可用:
PHPCompatibilityPasswordCompat
GitHub | PHPCompatibilityPasswordCompat Packagist:負責@ircmaxell 的password_compat
polyfill 函式庫。PHPCompatibilityParagonie
GitHub | Packagist:包含兩個規則集,分別考慮 Paragonie random_compat
和sodium_compat
polyfill 函式庫。PHPCompatibilitySymfony
GitHub | PHPCompatibilitySymfony Packagist:包含許多規則集,這些規則集解釋了 Symfony 專案提供的各種 PHP polyfill 程式庫。有關可用規則集的更多詳細信息,請查看 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 帶註釋的規則集 wiki 頁面中所述。
testVersion
與命令列在 PHPCS 3.2.0 及更低版本中,一旦您在規則集中設定了testVersion
,您就無法再從命令列否決它。從 PHPCS 3.3.0 開始,透過命令列設定的testVersion
將否決規則集中的testVersion
。
例如,當您的專案需要遵守 PHP 5.5-
,但您有一個需要與 PHP 5.2-
相容的引導檔案時,這可以提供更大的靈活性。
目前,有兩個嗅探器具有可以透過規則集設定的屬性。將來可能會提供更多自訂屬性。
PHPCompatibility.Extensions.RemovedExtensions
嗅探器會根據用於這些擴充功能的函式前綴檢查已刪除的擴充功能。這可能會與使用相同函數前綴的使用者態函數發生衝突。
若要將使用者態函數列入白名單,您可以將逗號分隔的函數名稱清單傳遞給嗅探器。
<!-- 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
嗅探需要了解擴展Serializable
接口的所有接口,以提供最可靠的結果。當嗅探器遇到擴展Serializable
介面的介面時會發出警告,而該介面是嗅探器未知的,並建議將介面名稱新增至屬性。
若要通知嗅探有關提供可序列化介面的其他介面的信息,請將以下程式碼片段新增至您的自訂規則集中:
< rule ref = " PHPCompatibility.Interfaces.RemovedSerializable " >
< properties >
< property name = " serializableInterfaces " type = " array " >
< element value = " MyCustomSerializableInterface " />
< element value = " AnotherSerializableInterface " />
</ property >
</ properties >
</ rule >
有數百個公共專案使用 PHPCompatibility 或在其之上進行擴充。您可能知道或看過的一些簡短清單:
非常歡迎您的貢獻。請閱讀貢獻文件以開始使用。
此程式碼根據 GNU 寬通用公共授權 (LGPL) 發布。欲了解更多信息,請訪問 http://www.gnu.org/copyleft/lesser.html