簡體   English   中英

"PHP版本兼容性檢查"

[英]PHP version compatibility check

我如何知道我的代碼與哪個版本的語言兼容? 有沒有辦法找出可以無錯誤執行的 PHP 語言的最低版本? 也許有一些檢查器或函數、方法、類?

您很可能需要安裝不同的 PHP 版本。 然后您可以使用 shell 檢查您的代碼與指定 PHP 版本的兼容性:

find . -name *.php | xargs -n1 /usr/bin/php -l

php -l命令以僅語法檢查模式運行 PHP。 上面的命令將檢查項目中的每個 PHP 文件與位於 /usr/bin/php 的 PHP 版本的兼容性。

安裝您要測試的 PHP 版本並運行php -l file.php以測試文件是否通過 lint 檢查。 如果 PHP 無法解析該文件,它會告訴您。

通常,您應該知道哪些功能在哪個版本中可用。 暫時忽略 PHP 5.3 及其幾個補丁版本的顯着改進,這歸結為了解 PHP 5.4、5.5、5.6 和 7.0 帶來了哪些功能,並在composer.json明確指向該版本。

提示:5.4 具有簡短的數組語法和特征,5.5 具有生成器, finally ,5.6 具有可變參數函數和參數解包,7.0 具有標量類型提示和返回類型。 使用了解這些功能的 IDE 會有所幫助,並在您使用所選版本不支持的內容時向您發出警告。

PHP 帶有一個常量PHP_VERSION ,其中包含您正在運行的當前版本,並具有一個函數version_compare()以允許輕松比較版本符號,如“哪個更大”。 這將允許根據版本執行代碼的不同部分,如果您在較低版本上運行,則允許為您需要的某些內容添加兼容性層,並在較新版本上運行時使用 PHP 實現(通常更快)。

除此之外,您總是會遇到未安裝擴展的問題。 這不是 PHP 版本本身的問題。 PHP 有function_exists()method_exists()來檢測你是否可以在你做之前調用某些東西(並因致命錯誤而失敗)。 您可以檢測此錯誤情況,然后使用不同的解決方案,或者通知用戶他必須在 PHP 安裝中添加一些內容。

我建議將 Travis CI 用於開源項目。 基本上你是免費獲得的,添加不同的 PHP 版本就像在 travis.yml 配置文件中添加一個新行。 他們也提供私有存儲庫的計划。 只要您在打算支持的所有 PHP 版本上運行代碼,任何其他為您提供大量 PHP 版本的 CI 安裝也可以正常工作。

最后的建議:放棄對 PHP 5.3 和 5.4 的支持。 這些版本已停止維護(或在 2 個月后離開僅安全修復階段),不應再成為目標。

https://3v4l.org/

這個在線工具顯示了 150 多個不同 PHP 版本(自 4.3.0 以來發布的每個版本)以及 HHVM 的代碼輸出。

不確定它是否足以滿足您的目的。

Docker 提供了通過非常小的努力來遵循pamelus提議的建議的能力:

docker run --rm -ti -v /path/to/your/app/src:/app php:8.0 bash
find /app -name '*.php' | xargs -n1 /usr/local/bin/php -l > /app/reportphp8

所以php:8.0是一個標簽,可以從PHP 的 DockerHub 頁面獲取。 通過更改此版本,您可以輕松檢查您的應用與 8.1/9.3/任何您想要的版本的兼容性。

/path/to/your/app/src是你的應用程序源根目錄(該目錄只包含你應用程序的源代碼,即 Symfony 中的src/ dir 和 Laravel 中的app/ 。這樣做是為了防止檢查vendors語法目錄)。

該報告將存儲在名為reportphp8的應用程序根目錄中。

重要的

上面的建議僅針對語法,即它可以檢測您是否使用已刪除或已棄用的語言結構或核心函數。 它無法檢測您是否為已更改簽名的函數提供了正確的類型等。為此,請使用靜態分析器,如Pslam / PHPStan / Phan

我推薦使用PHPCompatibility/PHPCompatibility庫來檢查我的項目的版本兼容性。

您可以指定要檢查的 PHP 版本。 例如,要測試 PHP 7.3:

./vendor/bin/phpcs -p . --standard=PHPCompatibility --runtime-set testVersion 7.3

以下是如何測試代碼的 php 8.0 兼容性(在https:\/\/odan.github.io\/2020\/12\/22\/php8-compatibility-check.html<\/a>上略有改進):

composer require --dev squizlabs/php_codesniffer phpcompatibility/php-compatibility

phpcs --config-set colors 1

vendor/bin/phpcs src -p --report=code --ignore=vendor/* --standard=vendor/phpcompatibility/php-compatibility/PHPCompatibility --runtime-set testVersion 8.0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM