【问题标题】:Complex ternary operator复三元运算符
【发布时间】:2015-09-27 13:50:55
【问题描述】:

我用过这个三元运算符。根据返回值检查我的长度变量$len

我的长度取自

$len = strlen($indChar); // values up to 3 ... 8

当它传递 3 的值时,它奇怪地返回 30

$lft = ($len <= 4) ? 10 : 
       ((5 <= $len) && ($len <= 6)) ? 20 : 
       ((7 <= $len) && ($len <= 8)) ? 30 : 35;

var_dump($lft); //30

我不知道我做错了什么。如有错误请指正。

【问题讨论】:

  • 它总是返回 30,你得到了&lt;= 条件加倍。试试这个(5 &gt;= $len) &amp;&amp; ($len &lt;= 6)(7 &gt;= $len) &amp;&amp; ($len &lt;= 8)
  • 每个表达式都必须包含在括号中。
  • 如果您阅读 php 文档和其他文献(在线/离线),您会注意到强烈建议不要使用复杂的三元运算...不仅因为可读性,还因为它非常错误-易于。如果您需要比较多个,请使用常规条件(if-else)...
  • Using nested ternary operators 的可能重复项

标签: php ternary-operator


【解决方案1】:

问题在于使用条件。将每个条件括在单独的括号中。

$len = 3
$lft = ($len <= 4) ? 10 : 
    (((5 <= $len) && ($len <= 6)) ? 20 : 
    (((7 <= $len) && ($len <= 8)) ? 30 : 35));
echo $lft; // 10

【讨论】:

    【解决方案2】:

    使用() 分别指定条件。试试 -

    $len = 3;
    $lft = ($len <= 4) ? 10 : 
           (((5 <= $len) && ($len <= 6)) ? 20 : 
           (((7 <= $len) && ($len <= 8)) ? 30 : 35));
    echo $lft; // 10
    

    建议您避免“堆叠”三元表达式。在单个语句中使用多个三元运算符时 PHP 的行为并不明显:

    DOCS

    Check it here

    【讨论】:

      猜你喜欢
      • 2019-07-14
      • 2011-05-05
      • 2014-09-29
      • 2018-09-10
      • 2021-04-14
      相关资源
      最近更新 更多