不能用三元运算符复制条件

时间:2016-03-30 14:11:24

标签: php

我试图复制这种情况:

$sth = $this->getResult();
if($sth !== true){
   return $sth;
}

我尝试使用三元运算符;

($sth !== true) ?  return $sth : ($sth == true) ? null;

但我得到了:

  

预期结肠

5 个答案:

答案 0 :(得分:3)

使用三元运算符无法实现您最终要实现的目标。

您尝试做的只是在1种情况下返回,并在另一种情况下继续执行代码。使用三元运算符执行此操作的唯一方法是:

$result = ($sth !== true) ? true : false;
if ($result) return;

但这有点挫败了三元运营商的目的。

实际上,您的代码存在一些问题:

  • 三元运算符总是需要3个部分(*)
  • 无需检查条件两次,因为操作员的整个点
  • 操作员返回一个值,因此您无法在真实或虚假部分内放置return

三元运营商需要3个部分

(condition) ? truthy result : falsy result

注意:从PHP 5.3开始,可以省略三元运算符的中间部分。表达式expr1?:expr3如果expr1的计算结果为TRUE则返回expr1,否则返回expr3。 - 来源:php.net

无需检查两次:

再次,让我们的操作员:

($sth !== true)
                ? "I return if '$sth' is not true"
                : "I return if '$sth' is true";

无需进行第二次检查。你已经涵盖了这两种情况。 :)

在真实或虚假部分内没有返回值

最后:它是一个返回值的运算符。你不能将return放在真实或虚假的部分,你需要把它放在它前面:

return ($sth !== true)
                ? "I return if '$sth' is not true"
                : "I return if '$sth' is true";

答案 1 :(得分:0)

您的代码中有两个'?只有一个':'。我相信这件事。您必须拥有与冒号相同数量的问号。

答案 2 :(得分:0)

如果您使用它从函数返回,我会这样做:

function testFunc()
{
    //arbitrary setting of $sth only to explain the point
    $sth = false;

    //condition ? true : false
    $outcome = ($sth === true) ? true : false;

    return $outcome;
}

// false
var_dump(testFunc());

记住,(条件)?值为true:如果为false则为value;

您也可以错过[value if true]参数,如下所示:

$outcome = ($sth === true) ?: false;

如果$sth为真,那么该表达式会将$outcome的值分配给$sth

答案 3 :(得分:0)

您的替换代码确实错过了最后的冒号。它在语法上是不正确的。 如果$sth !== true您返回$sth。如果没有,你开始一个新的三元语句(这是不完整的),我无法正确理解。它现在看起来并不像原始声明。

答案 4 :(得分:0)

三元运算符很好用,但它不是一个命令块。这是对价值的决定。经验法则,如果您可以将某些内容作为值分配给变量,则可以在三元运算符中使用它:

$var = 3;         // valid
($condition?3:0); // valid

 $var = return 3; //Invalid
 ($condition?return 3:null) //Invalid

你需要:

return ($sth !== true?$sth:null);