golgote/console_getargs2

控制台参数解析器和规则。

1.0.0 2015-01-03 23:05 UTC

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