有谁知道如何在同一脚本中出现错误(由于调用了不支持的函数/特性)之前终止不支持版本太低的PHP脚本?

下面是一个在PHP8.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&lt;8.2中它将抛出一个错误:

syntax error, unexpected token "readonly"

我想让脚本执行依赖于给定环境中可用的PHP版本,而不必使用另一个脚本进行判断(所有内容都在一个脚本中执行),因此预期输出应该是:

This script requires at least PHP 8.2

有可能以某种方式实现吗?

我知道我可以使用composer或两个脚本(第一个脚本将在PHP_VERSION符合要求时执行第二个脚本).但我只想有一个脚本,它可以详细地向用户解释为什么他不能使用它(或者,如果PHP版本正确,它就会执行).

推荐答案

PSR1是由PSR-2和PSR-12扩展而来的,它规定您可以让文件声明新的符号,如函数和类,或者您可以有一个有副作用的符号.您不应该有一个同时具有这两种功能的文件.你的 playbook 同时做到了这两点!

您应该这样做:

<?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();
}

require __DIR__ . "/vendor/autoload.php";
startMeUp($args);

因此,现在您有多个文件,但有一个解决方案可以将其设置为executable phar archive.例.composer就是这样制作的应用程序的一个例子.

Php相关问答推荐

PHP DOMDocument忽略第一个表S结束标记

如何隐藏x轴图表上的值

PHP-转义字符串内的双反斜杠

保存PHP条带以备将来使用,不显示用户界面

LaravelEloquent 地根据表中的值提取记录

Laravel;Composer安装突然返回选项快捷方式不能为空.

WooCommerce/WordPress:简单的产品属性显示

将数组推送到数组时,数组推送()出现问题

来自POST请求的(无效)json字符串中的奇怪字符(编码问题)

列出所有WooCommerce处理订单中的产品数量,SKU和品牌

FlySystem v3:使用本地适配器时出现问题

防止 WooCommerce 在前端加载全尺寸图像

对 WooCommerce 购物车和 checkout 中显示的运输方式进行排序

从 XAMPP 运行 shell 脚本时,意外标记(附近出现语法错误

PHP 创建 CSV 文件并用波斯语写入

在 groupBy laravel 5.7 中 Select 多列

在 Symfony 测试中何时使用 TestCase 而不是 KernelTestCase

计算组合指数

我需要获取传递到这个数组中的数据,但我没有得到它,因为在 Laravel 中数组是这样出现的

php-http/discovery 插件 1.15.1 是否仍在使用自己的模块 destruct Contao 4.13 中的composer 安装?