没有中间表达的三元语句

时间:2014-05-24 16:04:44

标签: php ternary

如何替换它:

if( $this->getInfo() ){
   $value = $this->getInfo();
}else{
   $value = $this->getAnotherInfo();
}

这将是更好的解决方案:

$value = $this->getInfo() ? $this->getInfo() : $this->getAnotherInfo();

但我们重复$this->getInfo()

3 个答案:

答案 0 :(得分:1)

这很有趣:

$value = $this->getInfo() ? : $this->getAnotherInfo();

答案 1 :(得分:0)

如果你不得不重复表达式,你可以编写一个返回第一个真值的函数。

$value = which ($this->getInfo(), $this->getAnotherInfo());

function which () { 
    if (func_num_args()<1) return false;
    foreach (func_get_args() as $s) if ($s) return $s;
    return false;
}

答案 2 :(得分:0)

讨厌的选项就是这样:

if (!($value = $this->getInfo())) $value = $this->getOtherInfo();

如果作业返回false,则指定另一个值。

但除了这看起来令人作呕之外,它仍然是重复的,尽管方式不同。


As of PHP 5.3,你可以省略三元运算符的中间部分并避免重复:

$value = $this->getInfo() ? : $this->getOtherInfo();

你想做什么。