• Zend Framework学习之-Zend_Console_Getopt对象的使用
  • 海贼王 发表于 2014/12/10 22:03:00 | 分类标签: Zend Getopt语法 异常处理
  • 读取(Fetching)选项和参数

    在声明 Zend_Console_Getopt 对象认可的选项和从命令行或数组提供参数后,可以查询这个对象来找出哪个选项被用户在程序中给定的命令行调用中被指定。这个类实现魔术方法,所以可以用名字来查询选项。

    数据的解析被延迟到第一个依靠 Zend_Console_Getopt 对象查询是否发现一个选项被给出,然后这个对象来执行解析。它允许在解析发生之前使用若干个方法调用来配置选项、参数、帮助内容和配置选项。

    操作 Getopt 异常

    如果用户在命令行中给出任何无效选项,解析函数抛出一个Zend_Console_Getopt_Exception。你应当在程序代码理捕捉这个异常。可以使用parse()方法强制对象来解析参数。这很有用,因为可以在try 块中调用parse()。如果通过,解析不再抛出异常。异常的抛出有一个定制的方法 getUsageMessage(),它作为字符串返回,这个字符串是所有被声明的选项的用法信息。

     捕捉 Getopt 异常

    try {
        $opts = new Zend_Console_Getopt('abp:');
        $opts->parse();
    } catch (Zend_Console_Getopt_Exception $e) {
        echo $e->getUsageMessage();
        exit;
    }
    
                

    解析抛出异常的情况包括:

    • 给出的选项不被认可。

    • 选项需要参数,但没有给出。

    • 选项参数类型错误。例如,当要求整数却给出一个非数字字符串。

    通过名字读取 (Fetching)选项

    可以使用 getOption() 方法来查询选项的值。如果选项有一个参数,这个方法返回参数的值。如果选项不带参数但用户的确在命令行中指定了,这个方法返回true,否则,返回null

      使用 getOption()

    $opts = new Zend_Console_Getopt('abp:');
    $b = $opts->getOption('b');
    $p_parameter = $opts->getOption('p');
    
                

    另外,可以使用魔术函数 __get() 来获取选项的值,好像它是类成员变量。 __isset() 魔术方法也可以实现。

     使用 __get() 和 __isset() 魔术方法

    $opts = new Zend_Console_Getopt('abp:');
    if (isset($opts->b)) {
        echo "I got the b option.\n";
    }
    $p_parameter = $opts->p; // null if not set
    
                

    如果选项被带有别名声明,在上面的方法中可以使用任何别名。

      报告选项

    有若干方法来报告由用户在当前命令行给出的选项的全集。

    • 作为字符串:使用toString()方法。选项被返回为用空格分隔的"flag=value"对的字符串。没有参数的选项值是字面上的"true"。

    • 作为数组:使用toArray()方法。选项被返回在一个简单的整数索引的字符串数组,flag 字符串在参数字符串之后,如果有的话。

    • 作为包含JSON数据的字符串:使用 toJson() 方法。

    • 作为包含 XML 数据的字符串: 使用 toXml() 方法。

    在上述所有的方法中,flag 字符串是对应于别名列表中的第一个字符串。例如:如果选项别名被声明如"verbose|v",那么第一个字符串,"verbose",被用作选项的规范名称。选项flag的名称不包括任何前面所述的短横线。

    读取非选项参数

    在选项参数和它们的参数从命令行中解析后,可能还有另外的参数剩余。可以使用getRemainingArgs()方法来查询这些参数。这个方法返回一个不属于任何选项的字符串数组。

      使用 getRemainingArgs()

    $opts = new Zend_Console_Getopt('abp:');
    $opts->setArguments(array('-p', 'p_parameter', 'filename'));
    $args = $opts->getRemainingArgs(); // returns array('filename')
    
                

    Zend_Console_Getopt支持 GNU 惯例,在参数中包含双短横线表示选项的结尾。在这个符号后面的任何参数必须当作非选项参数。如果有以一个短横线开头的非选项参数,这很有用。例如:"rm -- -filename-with-dash"。

  • 请您注意

    ·自觉遵守:爱国、守法、自律、真实、文明的原则

    ·尊重网上道德,遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他各项有关法律法规

    ·严禁发表危害国家安全,破坏民族团结、国家宗教政策和社会稳定,含侮辱、诽谤、教唆、淫秽等内容的作品

    ·承担一切因您的行为而直接或间接导致的民事或刑事法律责任

    ·您在编程中国社区新闻评论发表的作品,本网站有权在网站内保留、转载、引用或者删除

    ·参与本评论即表明您已经阅读并接受上述条款

  • 感谢本文作者
  • 作者头像
  • 昵称:海贼王
  • 加入时间:2013/6/13 0:00:00
  • TA的签名
  • 这家伙很懒,虾米都没写
  • +进入TA的空间
  • 以下内容也很赞哦
分享按钮