jdwx/cli

可扩展的命令行框架。

v1.0.10 2024-05-17 23:01 UTC

This package is auto-updated.

Last update: 2024-09-17 23:37:25 UTC


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 的早期版本,但尚未对其进行测试。

用法

使用此框架涉及两个步骤

  1. 创建扩展 AbstractCommand 类并实现 run() 方法的命令。这些类有常量属性,用于定义命令名称、帮助文本、用法示例、别名和(适用时)预定义选项。有关详细信息,请参阅内置命令。

  2. 从 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 行类。目前保留它以保持兼容性,因为对这些类进行重构与您预期的速度和愉悦程度完全一样(即,根本不)。绝对 不能 在新代码中使用它。我们期待有一天能将其删除。当那一天到来时,不会提前发出警告。