没有中间表达的三元陈述

如何取代这一点:

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

这将是更好的解决方案:

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

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


这是乐趣:

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

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

$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;
}

一个讨厌的选择是这样的:

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

如果赋值返回false赋值另一个值。

但除了这看起来令人厌恶的事情之外,它仍然是重复的,尽管以不同的方式。


从PHP 5.3开始,您可以忽略三元运算符的中间部分并避免重复:

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

哪个做你想要的。

链接地址: http://www.djcxy.com/p/57727.html

上一篇: Ternary statement without middle expression

下一篇: Is there a shorter syntax for the ternary operator in php?