我试图复制这种情况:
$sth = $this->getResult();
if($sth !== true){
return $sth;
}
我尝试使用三元运算符;
($sth !== true) ? return $sth : ($sth == true) ? null;
但我得到了:
预期结肠
答案 0 :(得分:3)
使用三元运算符无法实现您最终要实现的目标。
您尝试做的只是在1种情况下返回,并在另一种情况下继续执行代码。使用三元运算符执行此操作的唯一方法是:
$result = ($sth !== true) ? true : false;
if ($result) return;
但这有点挫败了三元运营商的目的。
实际上,您的代码存在一些问题:
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);