我正在寻找类似于Thor的命令解析库,但对于PHP。
更具体地说,我想要一些可以......
git remote add <url>
my-command --some-option='value'
创建了一个键值对,例如array( 'some-option' => 'value' )
到目前为止,我所看到的解决方案都没有令人满意。
最接近标记的是PEAR的Console_Getargs,尽管没有维持。
pear
命令使用Console_Getopt,但它们执行大量手动处理以实现我前三个要求中的功能。
PHP getopt()
无法处理子命令,似乎没有任何其他内置方法可以使用此功能。
是否有符合我可能错过的标准的PHP库?
答案 0 :(得分:7)
GetOptionKit解析参数,处理子命令,自动生成帮助,并且有一个很好的API。它需要PHP 5.4+。它托管在GitHub上,似乎是活动维护的。
对于布尔选项:
-d => ["debug" => true]
--debug => ["debug" => true]
对于增量选项:
-v => [ "verbose" => 1 ]
-vv => [ "verbose" => 2 ]
-vvv => [ "verbose" => 3 ]
对于多个值选项:
--foo=bar => [ "foo" => "bar" ]
--foo=bar --foo=zoo => [ "foo" => ["bar", "zoo"] ]
还有一个类型约束选项可帮助您获得如下选项值:
--output=file => [ "output" => SplFileInfo Object ]
答案 1 :(得分:6)
答案 2 :(得分:3)
我正在使用这个https://gist.github.com/2959619一段时间取得了相当大的成功。 它很短(约30行),并且支持两个子命令,名为short和long参数。
在较大的项目中使用时,我会推荐组件Symfony Console。它的功能超出了命令行解析,但它很棒。
答案 3 :(得分:3)
Getopt.php符合您的需求。
此外,它真正的面向对象的界面可以帮助您编写优雅的PHP代码。
它是well documented,它没有任何外部依赖关系。
-v
)和长(例如--version
)选项-abc
代替-a -b -c
)-vvv
)--option value
和--option=value
-ab 1
而不是-a -b 1
)<?php
use Ulrichsg\Getopt\Getopt;
use Ulrichsg\Getopt\Option;
$getopt = new Getopt(array(
new Option('m', 'mode', Getopt::REQUIRED_ARGUMENT),
new Option('p', 'parents'),
new Option('v', 'verbose'),
new Option('Z', 'context', Getopt::REQUIRED_ARGUMENT),
new Option(null, 'help'),
new Option(null, 'version')
));
try {
$getopt->parse();
if ($getopt['version']) {
echo "Getopt example v0.0.1\n";
exit(0);
}
// Error handling and --help functionality omitted for brevity
$createParents = ($getopt['parents'] > 0);
// Note that these are null if the respective options are not given
$mode = $getopt['mode'];
$context = $getopt['context'];
$dirNames = $getopt->getOperands();
makeDirectories($dirNames, $createParents, $mode, $context);
} catch (UnexpectedValueException $e) {
echo "Error: ".$e->getMessage()."\n";
echo $getopt->getHelpText();
exit(1);
}
答案 4 :(得分:2)
如果somone正在寻找具有以下功能的独立于框架的解决方案: