在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'。
在哪种情况下,该条件可能为真?
可能很明显,但我不明白。谢谢你的帮助。
1条答案
按热度按时间mklgxw1f1#
如果你git-blame源代码,提交包含一个链接到一个博客文章,详细解释了这个问题:https://bbqsoftwares.com/blog/phpunit-big-sur .
简而言之:在特定的PHP版本上,内部版本号会包含额外的文本,并且在技术上是无效的,这会破坏一些PHPUnit代码,这些代码后来使用
version_compare
测试PHP_VERSION
。为了在代码中预先解决这个问题,作者添加了这个简单的检查,它对所有常规支持的PHP版本都通过,而对这个特定的PHP版本失败,否则会导致模糊和不直观的问题。