PHP简写如果还有

时间:2012-04-09 21:00:55

标签: php if-statement

有没有办法执行以下操作,但简而言之是if / then语法:

if($method->isAbstract()) {
   $details['abstract'] = true;
}

如果我这样做:

$details['abstract'] = $method->isAbstract() ? true : null;

它不完全相同,因为数组键abstract始终设置。如果isAbstract()为真,我只会设置数组键。为了澄清,如果isAbstract()为false,则不要在数组中设置键。

感谢。

2 个答案:

答案 0 :(得分:4)

我手头没有PHP解释器,但我想这会起作用:

$method->isAbstract() && $details['abstract'] = true;

更新:是的,它有效→http://codepad.org/lW23FR0j

答案 1 :(得分:2)

我不会过分担心尝试缩短三行代码,无论如何都可以写成一行:

if ( $obj->method() ) $data['key'] = 'value' ;

然而,正如@Mischa's answer所示,有更短的方法。您也可以使用逻辑运算符&&来执行赋值:

$obj->method() && $data['key'] = 'value' ;

在此方法中,如果左侧的表达式为“true”,则评估右侧的表达式。

另一种方法是新的较短的三元运算符,它排除第二个表达式。虽然您在原始问题中提供了长格式三元组作为替代方案,但您也可以考虑自PHP 5.3以来提供的新格式

!$obj->method() ?: $data['key'] = 'value' ;

由于我们没有使用第二个表达式,我们在第一个表达式中反转了我们的测试。不再检查积极因素,我们现在正在寻找负面因素。当发现否定时,就会发生我们的任务。

我不提供这个答案,鼓励您避免使用3行解决方案,但只是为了鼓励您随时探索更短的解决方案,因为它们经常导致您可能没有的部分语言否则被发现。