为什么要在phpunit开始时测试PHP_VERSION?

ha5z0ras  于 2023-04-04  发布在  PHP
关注(0)|答案(1)|浏览(93)

在phpunit的开始有一个条件,但我缺乏知识来理解它:

if (!version_compare(PHP_VERSION, PHP_VERSION, '=')) {
    fwrite(
        STDERR,
        sprintf(
            '%s declares an invalid value for PHP_VERSION.' . PHP_EOL .
            'This breaks fundamental functionality such as version_compare().' . PHP_EOL .
            'Please use a different PHP interpreter.' . PHP_EOL,

            PHP_BINARY
        )
    );

    die(1);
}

来源:https://github.com/sebastianbergmann/phpunit/blob/main/phpunit
请参阅php文档中关于version_compare的内容:https://www.php.net/manual/en/function.version-compare.php
Version_compare -比较两个“PHP标准化”的版本号字符串。但是这里我们测试的是同一个'PHP_VERSION'。
在哪种情况下,该条件可能为真?
可能很明显,但我不明白。谢谢你的帮助。

mklgxw1f

mklgxw1f1#

如果你git-blame源代码,提交包含一个链接到一个博客文章,详细解释了这个问题:https://bbqsoftwares.com/blog/phpunit-big-sur .
简而言之:在特定的PHP版本上,内部版本号会包含额外的文本,并且在技术上是无效的,这会破坏一些PHPUnit代码,这些代码后来使用version_compare测试PHP_VERSION。为了在代码中预先解决这个问题,作者添加了这个简单的检查,它对所有常规支持的PHP版本都通过,而对这个特定的PHP版本失败,否则会导致模糊和不直观的问题。

相关问题