krypt0nn/consoleargs

PHP 库,添加一些类以实现自己的命令行管理器

2.1.2 2021-06-04 21:04 UTC

This package is auto-updated.

Last update: 2024-09-05 03:51:49 UTC


README

ConsoleArgs - 用于实现 PHP 7.4 命令行参数处理的库

安装

composer require krypt0nn/consoleargs

工作示例

<?php

namespace ConsoleArgs;

(new Manager ([
    new Command ('hello', function ()
    {
        echo 'Hello, World!';
    })
]))->execute (array_slice ($argv, 1));

// array_slice нужен чтобы отрезать аргумент вызова файла из консоли
php index.php hello

输出

Hello, World!

处理参数

要获取传递给命令的参数列表,您可以在命令中添加匿名函数参数

<?php

namespace ConsoleArgs;

(new Manager ([
    new Command ('write', function ($args)
    {
        echo implode (' ', $args);
    })
]))->execute (array_slice ($argv, 1));
php index.php write kek lol arbidol

输出

kek lol arbidol

处理参数

参数功能提供 Param 对象,标志提供 Flag 对象

<?php

namespace ConsoleArgs;

(new Manager ([
    (new Command ('write', function ($args, $params)
    {
        // Если было указано несколько одинаковых параметров, то будет указан список всех введённых значений
        // Поэтому это так же нужно предусмотреть:
        if (is_array ($params['--glue']))
            $params['--glue'] = $params['--glue'][0];
        
        echo $params['--base64'] ?
            base64_encode (implode ($params['--glue'], $args)) :
            implode ($params['--glue'], $args);
    }))->addParams ([
        // Первый аргумент - название параметра
        // Второй аргумент (не обязательный) - значение по умолчанию
        // Третий аргумент (не обязательный) - обязательно ли нужно использовать данный параметр
        new Param ('--glue', ' '),

        // Аргумент - название флага
        // "-b64" - алиас флага (альтернативное название)
        (new Flag ('--base64'))->addAlias ('-b64')
    ])
], new DefaultCommand (function ($args)
{
    echo 'Command "'. $args[0] .'" not founded. You should write correct command name';
})))->execute (array_slice ($argv, 1));
php index.php write kek lol arbidol

输出

(исключение, т.к. не был использован параметр --glue)
php index.php write kek lol arbidol --glue ", "

输出

kek, lol, arbidol
php index.php write kek lol arbidol --glue ", " --base64

输出

a2VrLCBsb2wsIGFyYmlkb2w=

命令分支

在命令的匿名函数中,您可以创建具有新命令的新命令管理器。这样,您可以创建用于...命令...等等...

<?php

namespace ConsoleArgs;

(new Manager ([
    (new Command ('test', function ($args)
    {
        (new Manager ([
            new Command ('1', function ()
            {
                echo 'Enfesto Studio'. PHP_EOL;
            }),

            new Command ('2', function ()
            {
                echo 'Every Software'. PHP_EOL;
            })
        ]))->execute ($args);
    }))->addAlias ('alias_test')
]))->execute (array_slice ($argv, 1));
php index.php test 1

输出

Enfesto Studio
php index.php alias_test 2

输出

Every Software

帮助命令

<?php

namespace ConsoleArgs;

$manager = new Manager ([
    (new Command ('write', function ($args, $params)
    {
        if (is_array ($params['--glue']))
            $params['--glue'] = $params['--glue'][0];
        
        echo implode ($params['--glue'], $args);
    }))
        ->setDescription ('Output entered message')
        ->addParams ([
            (new Param ('--glue', ' '))->addAlias ('-g')
        ])
]);

$manager
    ->addCommand (new HelpCommand ($manager))
    ->execute (array_slice ($argv, 1));
php index.php help

输出

write — Output entered message
       Not required:
         --glue " " (-g)

本地化

负责本地化的对象是 Locale。详细信息请参阅类内容

作者:[Подвирный Никита](https://vk.com/technomindlp) 为 [Enfesto Studio Group](https://vk.com/hphp_convertation) 特别编写。