【问题标题】:Multiple if statements in PHPPHP中的多个if语句
【发布时间】:2013-03-28 21:17:23
【问题描述】:

我知道这不是这样做的方法,但我在尝试使用条件语句设置变量时遇到了一些麻烦。

对于某些上下文,$foo$foo_1$foo_2 正在检查是否设置了表单字段,如果设置了,则将 $bar 设置为等于每个条件附带的计算。

if(isset($foo)) {
    $bar = ($baz * 52) * ($qux);
} 

if(isset($foo_1)) {
    $bar = ($baz_1 * 12) * ($qux);
}

if(isset($foo_2)) {
    $bar = ($baz_2 * $qux);
}

这是因为现有代码在计算中使用了 $bar

$a = ($b / $bar)

$a 在各种情况下会进一步向下传递。

事实上,只有第一个 $foo 条件正确传递了 $bar,所有其他条件 $bar 输出为 NULL。

编辑:澄清上面的代码(不正确)并更新下面的示例:

$foo = isset($form['first'] ? $form['first'] : '';
$foo_1 = isset($form['second'] ? $form['second'] : '';
$foo_2 = isset($form['third'] ? $form['third'] : '';
if(isset($foo)) {
    $bar = ($foo * 52) * $qux;
} 

if(isset($foo_1)) {
    $bar = ($foo_1 * 12) * $qux;
}

if(isset($foo_2)) {
    $bar = $foo_2 * $qux;
}

Revent、Oswald 和 RoyalBG 的建议指出我的代码没有正确设置变量,情况确实如此。 $baz$baz_1$baz_2 已弃用且不存在,并替换为 $foo$foo_1$foo_2 以伴随所需输入的条件。一旦我把它清理干净,我将使用 switch 语句而不是我上面写的。以下所有 cmets 都非常有帮助 感谢您的帮助。

【问题讨论】:

  • 你是乘法,不用括号。另外,请记住这些if 不是相互排斥的。
  • 你没有展示足够多的代码来让我真正提供帮助,但据我所知,我会说几乎可以肯定你的代码可以写得更好。在codereview.stackexchange.com 寻求改进代码的帮助可能会让您受益
  • 更新后的例子给出了解析错误。

标签: php switch-statement conditional case


【解决方案1】:

$foo_1$foo_2 永远不会被设置。这就是为什么如果 $foo 没有设置,$bar 也不会设置。

【讨论】:

    【解决方案2】:

    请进一步澄清您的代码,因为我看不到您的 $baz_1 变量状态和初始化位置?

    正如逻辑所说,您必须将 $foo_1 乘以 $qux 我不知道您所说的 $baz_1,$baz_2 变量是什么意思

    那么,如果您正在测试 $foo_1,$foo_2,您必须根据测试的变量而不是可能未设置的新变量进行计算

    更多解释如果设置了 $foo,$foo_1,$foo_2 但未设置 $baz,$baz_1,$baz_2 我看不到对 $baz 变量的任何操作,请澄清情况。

    【讨论】:

      【解决方案3】:

      如果您的条件中的代码没有传递给 PHP 引擎,当您要求设置变量时,很可能没有设置...您也可以尝试使用 switch/case 块

      【讨论】:

        【解决方案4】:

        Oswald 和 Royal Bg 是正确的,您的变量可能永远不会设置。我会这样编写代码(假设您允许 $baz 和 $qux 变量为零值):

        $bar = 0;   // initialize the variable so it won't be null
        if(isset($foo) && isset($baz) && isset($qux)) {
          $bar = ($baz * 52) * ($qux);
        } 
        else if(isset($foo_1) && isset($ba_1z) && isset($qux)) {
          $bar = ($baz_1 * 12) * ($qux);
        }
        else if(isset($foo_2) && isset($baz_2) && isset($qux)) {
          $bar = ($baz_2 * $qux);
        }
        

        然后您可以使用 empty() 函数检查 $bar 的值,如果值为 null、零或空字符串,则返回 true。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-02-29
          • 2021-06-20
          • 2020-07-23
          • 2014-08-20
          • 1970-01-01
          相关资源
          最近更新 更多