Search by

haoa / cli

quhao

PHP CLI Interactive Commander

v1.0.4 2026-11-13 12:12 UTC

This package is auto-updated.

Last update: 2026-11-13 12:21:30 UTC


README

PHP 命令行工具,提供命令注册、选项解析和帮助展示。

定义命令

命令继承 Haoa\Cli\BaseRun,在 options 中声明选项,在 main() 中读取参数并执行业务。

use Haoa\Cli\BaseRun;
use Haoa\Cli\Flag;
use Haoa\Cli\Option;

/** 示例命令。 */
class HelloCommand extends BaseRun
{
    /** 声明命令选项,名称不带横线。 */
    public function __construct()
    {
        $this->options = [
            new Option(['names' => ['name', 'n'], 'usage' => '姓名']),
            new Option(['names' => ['count', 'c'], 'usage' => '次数']),
            new Option(['names' => ['verbose'], 'usage' => '显示详细信息']),
        ];
    }

    /** 读取参数并执行命令。 */
    public function main(): void
    {
        $name = Flag::match('name', 'n')->string('访客');
        $count = Flag::match('count', 'c')->int(1);
        $verbose = Flag::match('verbose')->bool();
        $first = Flag::arguments()->first()->string();
        $args = Flag::arguments()->array();

        echo "你好,{$name},次数:{$count}\n";
    }
}

注册与运行

入口文件先加载 Composer 自动加载器和命令类,再创建应用:

use Haoa\Cli\Application;

$app = new Application();
$app->addArrCommand([
    'name' => 'hello',
    'desc' => '问候示例',
    'class' => HelloCommand::class,
])->run();
php bin/cli.php hello 文件名 --name=张三 --count=2 --verbose
php bin/cli.php hello -n 张三 -c 2
php bin/cli.php -h
php bin/cli.php hello -h
php bin/cli.php hello --help

参数规则

  • 单字符名称使用单横线,如 -n;多字符名称使用双横线,如 --name。选项必须在 options 中声明,未声明的选项会被拒绝。
  • 选项值支持 --name=张三 和 --name 张三。解析器会把选项后紧邻的非横线开头参数当作其值;布尔选项建议放在末尾,或显式写成 --verbose=true。
  • Flag::match() 按传入名称顺序匹配,返回值支持 string()、int()、float()、bool(),均可传默认值。字符串空值使用默认值;数字通过类型转换读取,不做格式校验。
  • 布尔选项未传时使用默认值,传入时仅字符串 false 表示假,其他值(包括空值、0)都表示真。
  • Flag::arguments() 获取位置参数:first() 返回首个值,支持上述类型读取;array() 返回字符串数组,values() 返回可逐个进行类型读取的 FlagValue 数组。
  • h、help 是公共帮助选项的保留名称,命令不得重复声明,否则执行或查看该命令帮助时会抛出异常。