【问题标题】:php "?" operator - ($some_var) ? func() : func(); [duplicate]php“?”运算符 - ($some_var) ?函数():函数(); [复制]
【发布时间】:2012-07-10 14:49:00
【问题描述】:
($some_var) ? true_func() : false_func();

php 中的 this 是什么,它有什么作用?存在,布尔值还是什么?

【问题讨论】:

标签: php variables operators


【解决方案1】:

和这个是一样的:

if ($some_var) {
    true_func();
}
else {
    false_func();
}

如果$some_val为真,则执行:之前的函数。

如果$some_val为假,则执行:之后的函数。

称为三元运算符。

通常在为变量赋值时用作表达式:

$some_var = ($some_bool) ? $true_value : $false_value;

这是最被滥用的编程结构之一(在我看来)。

【讨论】:

  • 嗯,“几乎一样”。但是,?: 运算符是一个表达式(计算结果为一个值)。虽然示例中未显示,但由于将其用作 表达式 是使用?:有用的非“滥用”方式,因此值得一提。
  • @pst - 我不明白你想说什么。请解释。我并不是说?: 运算符没有位置。我只是说它往往会经常被滥用。我觉得您试图区分使用它进行分配还是使用它来执行不同的功能,但我不太明白您的评论。
  • 我相信它在示例中的使用方式只是执行两个功能之一。不涉及任务。它确实评估为一个表达式,但在给定的上下文中不使用该表达式。因此,我相信我的代码完全相同
  • 我的意思是,如图所示,表单永远不会出现在我的代码中。但是,使用 expression 的表单(例如,使用 ?:result 执行某些操作)可以很常见,如果它有意义的话。因为显示的表格不是使用它擅长的表达式,因为它只是“聪明的高尔夫代码”,所以也应该提到使用三元运算符的“正确”方式(如后面所做的那样)编辑,+1) .. 就是这样:)
  • 知道了。谢谢。我同意它很有用,而且我确实使用它(在适当的时候)。我也认为它经常被滥用。
【解决方案2】:

它检查boolean:

当转换为布尔值时,以下值被视为 FALSE:

the boolean FALSE itself
the integer 0 (zero)
the float 0.0 (zero)
the empty string, and the string "0"
an array with zero elements
an object with zero member variables (PHP 4 only)
the special type NULL (including unset variables)
SimpleXML objects created from empty tags

所有其他值都被视为 TRUE(包括任何资源)。

也可以看看:PHP type comparison tables

【讨论】:

  • 是的,这是它的部分 ..
【解决方案3】:

它实际上是一个三元运算符。 (我的意思是运算符 ?: 是一个三元运算符)。

($some_var) ? func1() : func2();

'$some_var' 是一个布尔表达式。 如果计算结果为真,则执行 'func1()' else 'func2()' 被执行。

【讨论】:

    【解决方案4】:

    这是ternary 运算符。

    而不是写

    if ($a < $b) {
      $minVal = $a;
    } else {
      $minVal = $b;
    }
    

    你可以写成这样

    $minVal = ($a < $b) ? $a : $b;
    

    【讨论】:

      【解决方案5】:

      嗯,它的写法和刚才一样

      func();
      

      (如果$somevartrue,则调用func;否则,也调用func!)

      【讨论】:

        【解决方案6】:

        取自PHP Manual: Comparison Operators

        <?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'];
        }
        
        ?>
        

        【讨论】:

        • 有很多额外的垃圾,即使来自链接:(
        猜你喜欢
        • 2011-04-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-03
        • 2013-10-21
        • 1970-01-01
        • 2011-07-19
        • 1970-01-01
        相关资源
        最近更新 更多