PHP版本兼容性检查

时间:2015-07-18 10:25:30

标签: php

我如何知道我的代码与哪种语言版本兼容?有没有办法弄清楚哪个是可以无错误地执行它的PHP语言的最低版本?也许有一些Checker或函数,方法,类?

5 个答案:

答案 0 :(得分:7)

您很可能需要安装不同的PHP版本。然后,您可以使用shell检查代码与指定PHP版本的兼容性:

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

php -l命令以语法检查模式运行PHP。上面的命令将检查项目中的每个PHP文件,并与位于/ usr / bin / php的PHP版本兼容。

答案 1 :(得分:7)

安装要测试的PHP版本并运行php -l file.php以测试文件是否通过lint检查。如果PHP无法解析文件,它会告诉你。

通常,您应该了解哪个版本的功能可用。忽略PHP 5.3及其几个补丁版本,暂时增加了显着的改进,这归结为知道PHP 5.4,5.5,5.6和7.0带来了哪些功能,并在composer.json中明确指向该版本。 / p>

作为提示: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个月内完成仅安全修复阶段),并且不应再真正成为目标。

答案 2 :(得分:1)

https://3v4l.org/

此在线工具显示超过150种不同PHP版本(自4.3.0以来发布的每个版本)以及HHVM的代码输出。

不确定它是否适合您的目的。

答案 3 :(得分:0)

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 是一个可以从 DockerHub page of PHP 获得的标签。通过更改此版本,您可以轻松检查您的应用与 8.1/9.3/任何您想要的版本的兼容性。

/path/to/your/app/src 是您的应用程序源根目录(该目录仅包含您应用程序的源代码,即 Symfony 中的 src/ 目录和 Laravel 中的 app/。这样做是为了防止检查vendors 目录的语法)。

报告将存储在名为 reportphp8 的应用程序根目录中。

重要

以上建议仅针对语法,即它可以检测您是否使用已删除或已弃用的语言结构或核心函数。它无法检测您是否为已更改签名的函数提供了正确的类型等。为此,请使用静态分析器,如 Pslam/PHPStan/Phan

答案 4 :(得分:0)

我推荐使用 PHPCompatibility/PHPCompatibility 库来检查我的项目的版本兼容性。

您可以指定要检查的 PHP 版本。例如,要测试 PHP 7.3:

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