jdwx / cli
可扩展的命令行框架。
Requires
- php: >=8.2.0
- ext-mbstring: *
- ext-readline: *
- jdwx/app: ^1.0.4
- jdwx/args: ^1.0
- psr/log: ^3.0
Requires (Dev)
- jetbrains/phpstorm-attributes: ^1.0
- phpunit/phpunit: ^9.5
README
PHP 框架,用于开发可扩展的 PHP 命令行界面 (CLI)。
这为开发 PHP 命令行界面 (CLI) 提供了一个强大的基础。它旨在易于使用、易于扩展,并提供从头开始实现可能很繁琐的功能。
它提供以下功能:
- 通过 readline 进行命令行编辑。
- 支持单引号和双引号字符串、转义序列和反引号命令替换的命令解析器。
- 命令字符串中的变量替换。(支持 ${var} 和 $var 语法。)
- 命令自动完成和上下文感知帮助。
- 一些常用的内置命令(例如,echo 和 expr)。
- 命令行历史查看、搜索和重新运行。
- 注释。
安装
您可以直接使用 Composer 要求它
composer require jdwx/cli
或者从 GitHub 下载源代码: https://github.com/jdwx/args.git
要求
此库需要 PHP 8.2 或更高版本,并带有 readline 扩展。它可能适用于 PHP 8 的早期版本,但尚未对其进行测试。
用法
使用此框架涉及两个步骤
-
创建扩展 AbstractCommand 类并实现 run() 方法的命令。这些类有常量属性,用于定义命令名称、帮助文本、用法示例、别名和(适用时)预定义选项。有关详细信息,请参阅内置命令。
-
从 Interpreter 类派生子类,并在构造函数中使用 addCommandClass() 方法添加您的命令。实例化您的解释器子类并调用 run() 方法以启动解释器。bin 目录中的 php_sh.php 文件提供了一个如何做到这一点的简单示例。
使用 Arguments 类将参数传递给命令。对于复杂的应用程序,您可能想要从 Arguments 派生子类以提供处理您应用程序相关的类型的方法。如果这样做,通常有助于创建一个抽象的 AbstractCommand 子类,该类使用您的自定义 Arguments 子类定义 run() 方法的签名。例如。
abstract class MyCommand extends AbstractCommand { abstract public function run( MyArguments $args ); }
然后将其用作自定义命令的父类。
当通用 Arguments 实现足够时,提供 Command 类供使用。
稳定性
此框架被认为是稳定的,并在生产代码中使用。但是,它已经过重构和改进以供一般使用,这些功能可能没有得到充分的测试。
历史
此框架已在生产中使用多年。它从更大的代码库中重构出来,并于 2024 年作为开源独立模块发布。
存在一个名为 addCommand() 的方法,出于历史原因存在。它在将命令作为 Interpreter 类的方法而不是单独的类实现的旧代码中广泛使用,这导致了无法维护的 10,000 行类。目前保留它以保持兼容性,因为对这些类进行重构与您预期的速度和愉悦程度完全一样(即,根本不)。绝对 不能 在新代码中使用它。我们期待有一天能将其删除。当那一天到来时,不会提前发出警告。