golgote / console_getargs2
控制台参数解析器和规则。
Requires
- php: >=5.3.0
This package is not auto-updated.
Last update: 2024-09-24 09:54:52 UTC
README
此实现自由灵感来自由Vinod Vijayarajan编写的Python模块getargs和Ron Savage编写的Perl CPAN模块Getopt::Simple。
此类实现了一个命令行解析器,您的CLI应用程序可以使用它来解析存在于$_SERVER['argv']或用户定义数组中的命令行参数。
它比Console_Getopt提供了更多的灵活性和错误检查。它还执行一些参数验证,并根据提供的配置向用户返回格式化的帮助文本。
该类提供以下功能
- 每个命令行选项可以接受任意数量的参数。
- 区分开关(不带参数的选项)和需要参数的选项。
- 识别“单参数选项”和“默认如果设置”选项。
- 开关和带参数的选项可以在命令行中交织。
- 您可以指定一个选项可以接受的最大和最小参数数量。如果不想指定上限,请使用-1。
- 指定选项的默认参数
- 简短选项可以超过一个字母的长度。
- 给定的选项可以通过多个名称(别名)调用。
- 默认情况下,了解--help,-h选项
- 可以返回格式化的帮助文本
- 可以使用'='语法指定参数
- 简短选项名称可以连接(-dvw 100 == -d -v -w 100)
- 可以定义一个默认选项,该选项可以接受任何没有选项名称的附加参数
- 可以传入用户定义的参数数组而不是使用$_SERVER['argv']
用法
构造函数将返回一个使用给定配置选项构建的新Console_Getargs2对象。如果配置或命令行选项包含错误,则返回的对象实际上是一个异常,说明错误的起因。
工厂期望一个数组作为参数。
此数组的格式为
array( longname => array('short' => Short option name, 'max' => Maximum arguments for option, 'min' => Minimum arguments for option, 'default' => Default option argument, 'desc' => Option description) )
如果选项可以通过多个名称调用,它们必须使用|作为分隔符来定义。例如:name1|name2 这在长名称和短名称中都有效。
max/min是选项接受的最/少参数数量。
“默认值”字段是可选的,用于指定选项的默认参数。如果该选项未在命令行中使用,则将分配给该选项。默认参数可以是
- 对于需要单个参数的选项,单个值
- 对于具有多个可能参数的选项,值数组
默认参数对于“默认如果设置”选项是必需的。
如果max是0(选项只是开关),则忽略min。如果max是-1,则该选项可以接受大于或等于min的无限制数量的参数。
如果max == min == 1,则将该选项视为单参数选项。
如果max >= 1且min == 0,则将该选项视为“默认如果设置”选项。这意味着它将仅在选项在命令行中使用且没有值时获取默认参数。(注意:对于“默认如果设置”选项,必须指定默认值)
如果选项不在命令行中,则不应用默认值。如果命令行中指定了选项的参数,则将分配给该选项的给定参数。因此
- 命令行中的--debug会导致debug = '默认参数'
- 在命令行中使用a --debug 2,如果没有使用,则debug将不会定义,默认值为2。
示例 1
require_once 'Console/Getargs2.php'; try { $args = new Console_Getargs2($config); } catch (Console_GetArgs2_UserException $e) { echo $e->getHelp(); } catch (Console_GetArgs2_Exception $e) { echo $e->getMessage(); } echo 'Verbose: '.$args['verbose']."\n"; if (isset($args['bs'])) { echo 'Block-size: '.(is_array($args['bs']) ? implode(', ', $args['bs'])."\n" : $args['bs']."\n"); } else { echo "Block-size: undefined\n"; } echo 'Files: '.(isset($args['file']) ? implode(', ', $args['file'])."\n" : "undefined\n"); if (isset($args['n'])) { echo 'Nodes: '.(is_array($args['n']) ? implode(', ', $args['n'])."\n" : $args['n']."\n"); } else { echo "Nodes: undefined\n"; } echo 'Log: '.$args['log']."\n"; echo 'Debug: '.(isset($args['d']) ? "YES\n" : "NO\n");
如果您不想为一系列参数指定任何选项名称,或者如果您希望将任何“剩余”参数默认分配,您可以创建一个名为CONSOLE_GETARGS_PARAMS的选项,它会抓取任何无法分配给其他选项的参数。CONSOLE_GETARGS_PARAMS的规则仍然相同。如果您指定必须传递两个值,则必须传递两个值。请参阅示例脚本以获取完整示例。
更多示例: https://github.com/pear/Console_Getargs/tree/master/examples