2

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

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

如果我做:

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

不太一样,因为数组键abstract总是设置的。isAbstract()如果为真,我只会设置数组键。澄清一下,如果 isAbstract() 为假,请不要在数组中设置键。

谢谢。

4

2 回答 2

4

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

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

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

于 2012-04-09T21:05:24.900 回答
2

我不会太担心尝试缩短三行代码,老实说无论如何都可以写在一行中:

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

但是,正如@Mischa 的回答所证明的,有更短的方法。您也可以使用逻辑运算符&&来执行赋值:

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

在此方法中,如果左边的表达式为“真”,则计算右边的表达式。

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

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

由于我们没有使用第二个表达式,我们在第一个表达式中反转我们的测试。不再检查阳性,我们现在正在寻找阴性。当找到负数时,我们的分配就会发生。

我提供此答案并不是为了鼓励您避免使用 3 行解决方案,而只是为了鼓励您不时探索较短的解决方案,因为它们通常会导致您可能没有发现的语言部分。

于 2012-04-09T21:23:39.070 回答