chh / optparse
易于使用的选项解析器。
Requires
- php: >=5.3.3
This package is not auto-updated.
Last update: 2024-09-14 13:33:35 UTC
README
安装
1. 获取 composer。
2. 将以下内容添加到您的本地 composer.json
{
"require": {
"chh/optparse": "*@dev"
}
}
3. php composer.phar install
示例
hello.php
:
<?php require "vendor/autoload.php"; use CHH\Optparse; $parser = new Optparse\Parser("Says Hello"); function usage_and_exit() { global $parser; fwrite(STDERR, "{$parser->usage()}\n"); exit(1); } $parser->addFlag("help", array("alias" => "-h"), "usage_and_exit"); $parser->addFlag("shout", array("alias" => "-S")); $parser->addArgument("name", array("required" => true)); try { $parser->parse(); } catch (Optparse\Exception $e) { usage_and_exit(); } $msg = "Hello {$parser["name"]}!"; if ($parser["shout"]) { $msg = strtoupper($msg); } echo "$msg\n";
试试看
% php hello.php Christoph --shout
HELLO CHRISTOPH!
使用
在解析器中,您将定义两件事
- 标志,以一个或两个短横线开头的参数,被视为程序的选项。
- 参数,除标志之外的所有内容。
主要关注点在于 CHH\Optparse\Parser
,您可以使用它来定义 标志 和 参数。
标志
要定义一个标志,将标志的名称传递给 addFlag
方法
<?php $parser = new CHH\Optparse\Parser; $parser->addFlag("help"); $parser->parse(); if ($parser["help"]) { echo $parser->usage(); exit; }
使用 addFlag
定义的标志默认情况下可通过 --$flagName
访问。要为标志定义另一个名称(例如,一个短名称),将名称作为选项数组中 alias
选项的值传递
<?php $parser->addFlag("help", ["alias" => "-h"]);
这样,help
标志既可通过 --help
也可以 通过 -h
访问。
默认情况下,标志不期望其后面跟随值。要启用此功能,请将标志的 has_value
选项设置为 true
<?php $parser->addFlag("name", ["has_value" => true]); $parser->parse(['--name', 'John']); echo "Hello World {$parser["name"]}!\n";
您可以通过设置 default
选项为标志分配默认值
<?php $parser->addFlag("pid_file", ["default" => "/var/tmp/foo.pid", "has_value" => true]); $parser->parse([]); echo "{$parser["pid_file"]}\n"; // Output: // /var/tmp/foo.pid
您还可以通过将引用传递到 var
选项中或使用 addFlagVar
方法并将变量传递给它来直接将标志绑定到引用
<?php $foo = null; $bar = null; $parser->addFlag("foo", ["var" => &$foo, "has_value" => true]); $parser->addFlagVar("bar", $bar, ["has_value" => true]); $parser->parse(['--foo', 'foo', '--bar', 'bar']); echo "$foo\n"; echo "$bar\n"; // Output: // foo // bar
解析器还支持标志的回调。这些回调作为最后一个参数传递给 addFlag
。每当解析器遇到标志时,都会调用回调。它传递对标志值的引用(如果没有值,则为 true
)。此用例包括分割字符串或将方法作为标志传递时运行方法
<?php $parser = new Parser; function usage_and_exit() { global $parser; echo $parser->usage(), "\n"; exit; } $parser->addFlag("help", ['alias' => '-h'], "usage_and_exit"); $parser->addFlag("queues", ["has_value" => true], function(&$value) { $value = explode(',', $value); });
parse
调用需要一个参数数组,或者默认使用 $_SERVER['argv']
中的参数。当缺少必需的标志或参数时,parse
方法会抛出 CHH\Optparse\ArgumentException
,因此请确保捕获此异常并向用户提供一个友好的错误消息。
解析器还能够通过查看定义的标志和参数来为命令生成使用消息。使用 usage
方法检索它。
命名参数
可以通过使用 addArgument
方法添加命名参数,该方法将参数的名称作为第一个参数,然后是一个选项数组。
以下选项支持参数
default
: 默认值(默认:null
)。var_arg
: 使此参数为可变长度参数(默认:false
)。help
: 帮助文本,用于在usage()
生成的使用消息中描述参数(默认:null
)。required
: 使此参数为必需,当在参数列表中省略参数时,解析器会抛出异常(默认:false
)。
与标志不同,您定义参数的顺序 很重要。
可以通过将选项数组中的 var_arg
选项设置为 true
来定义可变长度参数。可变参数只能位于最后一个位置,并且定义在可变参数之后的参数永远不会设置。
<?php $parser->addArgument("files", ["var_arg" => true]); // Will always be null, because the value will be consumed by the // "var_arg" enabled argument. $parser->addArgument("foo"); $parser->parse(["foo", "bar", "baz"]); foreach ($parser["files"] as $file) { echo $file, "\n"; } // Output: // foo // bar // baz
参数也可以通过使用args
、arg
和slice
方法来获取
<?php $parser->addArgument("foo"); $parser->parse(["foo", "bar", "baz"]); echo var_export($parser->args()); // Output: // array("foo", "bar", "baz") // Can also be used to fetch named arguments: echo var_export($parser->arg(0)); echo var_export($parser->arg("foo")); // Output: // "foo" // "foo" // Pass start and length: echo var_export($parser->slice(0, 2)); // Output: // array("foo", "bar");
许可证
版权所有(c)2012 Christoph Hochstrasser
特此授权,任何人免费获得此软件及其相关文档副本(以下简称“软件”),在不受限制的情况下处理软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件的副本,并允许获得软件的人进行上述行为,但需遵守以下条件
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
软件按“原样”提供,不提供任何形式的保证,无论是明示的、暗示的,还是关于适销性、特定用途的适用性或不侵犯权利的保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论是在合同行为、侵权行为或其他行为中产生的,无论是在软件中还是在使用或以其他方式处理软件时产生的。