【问题标题】:PHP getopt with if() elseif() break the middle conditionPHP getopt 与 if() elseif() 打破中间条件
【发布时间】:2014-10-01 11:10:10
【问题描述】:

我不确定出了什么问题,也不能从官方文档中获得太多帮助。

但这就是正在发生的事情。

我有选项 'a'、'c:' 和 'm:' 可以使用 getOpt() 从命令行读取

它们的布局如下:

if ($op = getopt("a")) {

    doAll();

} elseif ($op = getopt("c:")) {

    doSome($op["c"]);

} elseif ($op = getopt("m:")) {

    doOne($op["m"]);

} else {

    echo "INVALID ARGS"; exit;

}

选项“a”和“m”有效,但是当我使用选项“c”时:

php4 rebuild_mastertag.php -c 1234

它总是打印INVALID ARGS

如果我通过 1 或 12 或 12345678 让事情变得更神秘,它可以工作,但它不适用于 123、1234、12345、123456、1234567 之类的数字。

真的很困惑。

感谢您的宝贵时间。

【问题讨论】:

  • 考虑使用 IDE,比如 Netbeans 或类似的东西。它们用于突出编码错误(或可能的错误),例如条件中的无意分配。
  • 我很确定分配是有意的,他不想比较这些值。尽管如此,这不应该在 if 语句中完成是正确的,我建议只使用一个赋值,如 $op = getopt("ac:m:") 或类似的。
  • 是的,hchr,这个赋值是有意为速记的。
  • 这是完整的代码吗?如果我自己尝试,c 部分会被执行(不管我通过 '-c 1234' 还是 '-c 1')。
  • 到现在已经完成了,我正在尝试看看它是否调用了正确的例程。

标签: php getopt


【解决方案1】:

谢谢@hchr

您的解决方案似乎没有问题:

$op = getopt("ac:m:");

if (empty($op)) { alertForInvalidArgument(); } else { callProcessor($op);
}

function callProcessor($op)
{
    if ($op["a"]) {

        doAll();

    } elseif ($op["c"]) {

        doSome($op["c"]);

    } else {

        doOne($op["m"]);

    }
}

【讨论】:

    猜你喜欢
    • 2023-04-09
    • 1970-01-01
    • 2016-11-21
    • 2021-07-11
    • 2012-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多