【问题标题】:PHP Variable declaration not working in Laravel 5.4PHP 变量声明在 Laravel 5.4 中不起作用
【发布时间】:2017-05-15 05:09:25
【问题描述】:

我在 Laravel 5.4 Blade 视图中有以下代码:

@php($strVal = $character->Strength)

                        @php($strMod = 0)

                        <?php 
                            if ($strVal == 10 || 11) {
                                $strMod = 0;
                            } elseif ($strVal == 12 || 13) {
                                $strMod = 1;
                            } elseif ($strVal == 14) {
                                $strMod = 2;
                            } else {
                                $strMod = 2;
                            }


                        ?>

它从 MySQL 表中获取数据。 $strVal 是表中的一个 int。该代码创建了一个名为 $strMod 的 var,并通过许多 if/elseif 语句来查看它将等于什么。

在网页上显示如下:

<div class="huge charMod">+{{$strMod}}</div>

我的问题是,无论 strVar 等于什么,它都显示为“+0”。 strVar 工作正常,我可以从数据库中提取它并通过 {{ $strVal }} 显示它,但 strMod 拒绝采用 0 以外的值。

【问题讨论】:

    标签: php mysql laravel


    【解决方案1】:

    $strVal == 10 || 11 将始终返回 true

    因为这不是 PHP 中比较的工作方式。 == 操作符的优先级高于|| 操作符,所以会先执行。

    这意味着$strVal == 10 || 11 变成了false || 11 .. 即true

    我建议不要使用该代码:

    $map = [
        10 => 0,
        11 => 0,
        12 => 1,
        13 => 1, 
        // you dont actually need 14, because default value is aready 2
    ];
    
    $result = 2;
    
    if (array_key_exists($strVal, $map)) {
        $result = $map[$strVal];
    }
    
    $strVal = $result;
    

    或者,如果您使用的是 PHP 7.0+,它实际上都可以写成:

    $map = [10 => 0, 11 => 0, 12 => 1, 13 => 1];
    $strVal = $map[$strVal] ?? 2;
    

    【讨论】:

      【解决方案2】:

      您需要将 if 检查更改为

      if ($strVal == 10 || $strVal == 11) {
          $strMod = 0;
      } elseif ($strVal == 12 || $strVal == 13) {
          $strMod = 1;
      } elseif ($strVal == 14) {
          $strMod = 2;
      } else {
          $strMod = 2;
      }
      

      if ($strVal == 10 || 11) 将始终返回 true。如果要检查两个值,则需要再次使用变量 == 值来指定,如上例所示。

      【讨论】:

      • 您,先生,是个巫师。谢谢!
      猜你喜欢
      • 2018-12-01
      • 2017-10-10
      • 1970-01-01
      • 2021-03-08
      • 2017-12-07
      • 2017-09-21
      • 2014-04-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多