hhpack/getopt

Hack中的选项解析

维护者

详细信息

github.com/hhpack/getopt

源代码

问题

安装: 430

依赖项: 3

建议者: 0

安全: 0

星标: 1

关注者: 1

分支: 0

公开问题: 0

语言:Shell

1.7.1 2019-04-15 03:29 UTC

README

Latest Stable Version CircleCI Dependency Status

基本用法

解析命令行参数的方法如下。
定义一个不带参数的选项,使用on函数。
定义一个带一个参数的选项,使用take_on函数。

use HHPack\Getopt as cli;

final class Options {
    public bool $help = false;
    public bool $version = false;
    public string $fileName = 'test';
}

$options = new Options();

$parser = cli\optparser([
    cli\take_on([ '-n', '--name' ], 'NAME', 'file name', ($name) ==> { $options->fileName = $name; }),
    cli\on([ '-h', '--help' ], 'display help message', () ==> { $options->help = true; }),
    cli\on([ '-v', '--version' ], 'display version', () ==> { $options->version = true; })
]);

$args = $parser->parse($argv);

if ($options->help === true) {
    echo 'help on', PHP_EOL;
}

if ($options->version === true) {
    echo 'version on', PHP_EOL;
}

if ($options->fileName !== 'test') {
    echo 'name = ', $fileName, PHP_EOL;
}

CLI应用程序

如果您想创建CLI应用程序,我们建议使用ArgumentParser
ArgumentParser实现了显示用法、程序版本的接口。

use HHPack\Getopt as cli;
use HHPack\Getopt\App\{ ArgumentParser };

final class CliApplication
{

    private bool $help = false;
    private bool $version = false;
    private string $fileName = 'test';
    private ArgumentParser $argParser;

    public function __construct()
    {
        $this->argParser = cli\app('example', '1.0.0')
            ->description("This cli application is example.\n\n")
            ->usage("  {app.name} [OPTIONS]\n\n")
            ->options([
                cli\on(['-h', '--help'], 'display help message', () ==> {
                    $this->help = true;
                }),
                cli\on(['-v', '--version'], 'display version', () ==> {
                    $this->version = true;
                }),
                cli\take_on(['-n', '--name'], 'NAME', 'file name', ($name) ==> {
                    $this->fileName = $name;
                })
            ]);
    }

    public function run(Traversable<string> $argv): void
    {
        $this->argParser->parse($argv);

        if ($this->help) {
            $this->argParser->displayHelp();
        } else if ($this->version) {
            $this->argParser->displayVersion();
        } else {
            echo "file name: ", $this->fileName, PHP_EOL;
        }
    }
}

(new CliApplication())->run($argv);

运行测试

composer install
composer test