有没有办法执行以下操作,但简而言之是if / then语法:
if($method->isAbstract()) {
$details['abstract'] = true;
}
如果我这样做:
$details['abstract'] = $method->isAbstract() ? true : null;
它不完全相同,因为数组键abstract
始终设置。如果isAbstract()
为真,我只会设置数组键。为了澄清,如果isAbstract()为false,则不要在数组中设置键。
感谢。
答案 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行解决方案,但只是为了鼓励您随时探索更短的解决方案,因为它们经常导致您可能没有的部分语言否则被发现。