【问题标题】:PHP syntax with ? and : [duplicate]PHP 语法与 ?和:[重复]
【发布时间】:2011-05-21 08:14:02
【问题描述】:

可能重复:
What is the PHP ? : operator called and what does it do?

我找到了我正在寻找的东西的答案,但我不太理解语法,因为我认为他们使用了短标签。代码如下:

$temp = is_array($value) ? $value : trim($value);

有人能解释一下这是如何工作的吗?我认为这意味着如果为真,则返回值,如果为假,则返回修剪后的值,但我不确定。可以有两个以上的选择,还是严格正确和错误?

【问题讨论】:

标签: php syntax


【解决方案1】:

你是对的。这是一个条件运算符,?: 是一个三元运算符。

<?php

// Example usage for: Ternary Operator
$temp = is_array($value) ? $value : trim($value);

// The above is identical to this if/else statement
if (is_array($value)) {
    $temp = $value;
} else {
    $temp = trim($value);
}

?>

查看此页面的一半以了解更多信息:

http://php.net/manual/en/language.operators.comparison.php

【讨论】:

  • 只要.被称为二元运算符,就称为三元运算符:P
【解决方案2】:

相当于

if (is_array($value)){
    $temp = $value;
}
else{
    $temp = trim($value);
}

更多信息:http://en.wikipedia.org/wiki/Ternary_operation

【讨论】:

    【解决方案3】:

    $condition ? true : false?指令同

    if($condition)
       true
    else 
       false
    

    所以在您的示例中,代码与

    相同
    if(is_array($value))
      $temp = $value
    else 
      $temp = trim($value);
    

    【讨论】:

      【解决方案4】:

      基本一样

      if(is_array($value)) {
         $temp = $value;
      } else {
         $temp = trim($value);
      }
      

      【讨论】:

        【解决方案5】:

        你是对的。如果is_array($value) 返回true,则表达式设置$temp = $value,否则设置$temp = trim($value)

        【讨论】:

          【解决方案6】:

          严格来说是两个选择。你解释得对。

          if (is_array($value)) $temp = $value;
          else $temp = trim($value);
          

          如果你想破解这个语法以获得 3 个值,你可以这样做 $temp = (condition1) ? true : (condition2) ? true2 : false;

          【讨论】:

          • 确实,虽然可能值得添加括号以使分组更清晰:$temp = $condition1 ? 'val1' : ($condition2 ? 'val2' : 'val3'); 有些人认为以这种方式链接三元运算符本质上很难阅读。 YMMV。 ;-)
          【解决方案7】:

          这是三元运算符。它会在之前转换 exp 吗?一个布尔值。如果您想要更多选项,只需结合多 ?:.

          (con?trueorfalseiftrue:otherwise)? (con2?_:_):(con3?_:_)
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-06-05
            • 1970-01-01
            • 2013-01-06
            • 2011-06-04
            • 2011-10-01
            • 2012-08-05
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多