【问题标题】:What does this PHP (function/construct?) do, and where can I find more documentation on it?这个 PHP(函数/构造?)是做什么的,我在哪里可以找到更多关于它的文档?
【发布时间】:2010-06-13 01:28:54
【问题描述】:

简单的问题。这是这段代码。

    $r = rand(0,1);
    $c = ($r==0)? rand(65,90) : rand(97,122);
    $inputpass .= chr($c);

我了解它在 end 结果中的作用,但我想更好地解释它的工作原理,以便我自己使用它。对不起,如果这是一个不好的问题。

如果你不确定我在问什么,这里使用的(函数?):

$c = ($r==0)? rand(65,90) : rand(97,122);

【问题讨论】:

标签: php


【解决方案1】:

这就是所谓的三元运算符。它实际上相当于

if ($r == 0) {
    $c = rand(65, 90);
} else {
    $c = rand(97, 122);
}

但它显然更紧凑一些。查看docs 了解更多信息。

【讨论】:

  • 当然这意味着它不能有任何else if 语句?
  • @Rob 好吧,如果你想获得相同的效果,你可以嵌套三元组,但它会变得混乱:$c = $r == 0 ? rand(65, 90) : ($r == 1 ? something : rand(97, 122));。如果你想要 else if,我总是会选择明确的 if 语句。
  • 看起来很疯狂。谢谢你的帮助,克里斯
【解决方案2】:

这只是意味着:

if($r==0){
  $c = rand(65,90);
else{
  $c = rand(97,122);
}

如果语句为真,则执行?之后的第一个操作,否则执行:之后的操作。

它被称为ternary operator

【讨论】:

    【解决方案3】:

    它是Ternary Operator

    <?php
    // Example usage for: Ternary Operator
    $action = (empty($_POST['action'])) ? 'default' : $_POST['action'];
    
    // The above is identical to this if/else statement
    if (empty($_POST['action'])) {
        $action = 'default';
    } else {
        $action = $_POST['action'];
    }
    
    ?>
    

    表达式 (expr1) ? (expr2) : (expr3) 如果 expr1 的计算结果为 TRUE,则计算为 expr2,如果 expr1 的计算结果为 FALSE,则计算 expr3。 从 PHP 5.3 开始,可以省略三元运算符的中间部分。表达式 expr1 ?:如果 expr1 的计算结果为 TRUE,则 expr3 返回 expr1,否则返回 expr3。

    【讨论】:

      【解决方案4】:

      它被称为三元运算符。它类似于 if/else 构造,但不同之处在于使用三元运算符的表达式会产生一个值。

      也就是说,您不能将变量设置为 if/else 构造的结果:

      // this doesn't work:
      $c = if ($r == 0) {
               rand(65, 90);
           } else {
               rand(97, 122);
           }
      

      您可以在此处阅读更多信息:http://php.net/ternary#language.operators.comparison.ternary

      三元运算符经常被误用。在您展示的示例中使用它几乎没有什么好处。一些程序员喜欢使用紧凑的syntactic sugar,即使在不需要时也是如此。或者甚至更清楚地写出完整的 if/else 构造。

      如果您使用测量测试覆盖的代码行的工具,三元运算符也可能掩盖测试覆盖率。

      【讨论】:

        猜你喜欢
        • 2017-08-02
        • 1970-01-01
        • 2023-03-11
        • 2018-06-16
        • 2012-02-27
        • 1970-01-01
        • 2020-09-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多