【问题标题】:Ternary Operator(Elvis Operator) ?:三元运算符(猫王运算符)?:
【发布时间】:2018-09-26 01:21:38
【问题描述】:

我只是想知道为什么这段代码返回 1

$complete = 'complete';
$completed = ($complete == 'complete') ?: 'Not Complete';

如果我试试这个

$complete = 'complete';
$completed = ($complete == 'complete') ? $complete : 'Not Complete';

还有这个

$complete = 'complete';
if ($complete == 'complete') {
    $completed = $complete;
} else {
    $completed = 'Not Complete';
}

他们都返回'complete'

基于此?: operator (the 'Elvis operator') in PHP

它们不都应该返回相同的值吗?

【问题讨论】:

  • 在第一个示例中,它返回解析为 true/1 的表达式 ($complete == 'complete')。其他人返回$complete。 (我想这是第二个例子中的错字:..? $completeD :..

标签: php


【解决方案1】:

这是因为您在第一个示例中进行了布尔检查:

$complete == 'complete' // returns 'true'

并且操作符告诉,如果语句为真,则返回语句的值,否则返回'not Complete'。确实如此。而true 表示为1

用你的例子来解释:

// sets '$completed' to '($complete == 'complete')' what is 'true'
$completed = ($complete == 'complete') ?: 'Not Complete';

// sets '$completed' to '$completed', what is 'NULL', because '$completed' seems to be undefined before
$completed = ($complete == 'complete') ? $completed : 'Not Complete';

// sets '$completed' to the value of '$complete', because the statement is 'true'
if ($complete == 'complete') {
    $completed = $complete;
} else {
    $completed = 'Not Complete';
}

【讨论】:

    【解决方案2】:

    你可以这样使用 Elvis Operator:

    $completed = $complete ?: 'Not Complete';
    

    在您的代码中,您有这样的语句:

    $completed = true ?: 'Not Complete';
    

    因此它返回 true。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-07
      • 2018-09-10
      相关资源
      最近更新 更多