有没有人知道如何在同一个脚本中发生错误(由于调用了不支持的函数/特性)之前终止版本过低的PHP脚本?
下面是PHP 8.2中引入的readonly class
示例:
#!/usr/bin/env php
<?php
define("MIN_PHP_VER", 8.2);
if (version_compare(PHP_VERSION, MIN_PHP_VER, '<'))
{
echo "This script requires at least PHP " . MIN_PHP_VER . "\n";
die();
}
readonly class SomeClass
{
}
字符串
显然,这是行不通的,因为整个脚本是在开始时读取的,所以在PHP < 8.2中会抛出一个错误:
syntax error, unexpected token "readonly"
型
我希望脚本的执行依赖于给定环境中可用的PHP版本,而不必使用另一个脚本进行检查(所有内容都在一个脚本中执行),因此预期输出应为:
This script requires at least PHP 8.2
型
是不是以某种方式有可能实现呢?
我知道我可以使用composer
或两个脚本(当PHP_VERSION符合要求时,第一个脚本将执行第二个脚本)。但我只想有一个脚本,将详细解释给用户为什么他不能使用它(或它只会执行,如果PHP版本是正确的)。
2条答案
按热度按时间quhf5bfb1#
PSR 1是由PSR-2和PSR-12扩展的,它规定你可以让一个文件声明新的符号,比如函数和类,或者你可以有一个有副作用的符号。你不应该有一个文件,这两个。你的剧本两者都有!
你应该这样做:
字符串
所以现在你有多个文件,但有一个解决方案,使它成为一个executable phar archive。例如,
composer
就是这样一个应用程序的例子。xiozqbni2#
处理此问题的典型方法是在安装时使用Composer'sx 1 m0n1x配置来约束版本。这意味着要使用PSR-4命名约定,以支持使用自动加载器--无论如何都应该这样做。这样,你就可以在
composer.json
文件中指定你的版本要求,而不需要在代码中的任何地方进行任何显式的版本检查:字符串
然后,当你运行
composer install
或composer update
时,你会得到一个错误:型