2

次のことを行う方法はありますが、簡単に言うとif/then構文です。

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

私が行った場合:

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

abstract配列キーは常に設定されているため、まったく同じではありません。isAbstract()trueの場合にのみ、配列キーセットを使用します。明確にするために、isAbstract()がfalseの場合は、配列にキーを設定しないでください。

ありがとう。

4

2 に答える 2

4

PHPインタープリターは手元にありませんが、これでうまくいくと思います。

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

更新:はい、動作します→ http://codepad.org/lW23FR0j

于 2012-04-09T21:05:24.900 に答える
2

3 行のコードを短くしようとしても、あまり心配する必要はありません。

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

ただし、@Mischaの回答が示すように、より短い方法があります。論理演算子を使用&&して代入を実行することもできます。

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

このメソッドでは、左側の式が「真」の場合、右側の式が評価されます。

もう 1 つの方法は、2 番目の式を除外する新しい短い三項演算子です。元の質問で長い形式の 3 進数を代替手段として提示しましたが、PHP 5.3 以降に提供された新しい形式を検討することもできます。

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

2 番目の式を使用していないため、最初の式のテストを逆にします。ポジティブをチェックするのではなく、ネガティブを探しています。ネガが見つかると、割り当てが行われます。

この回答を提供するのは、3 行のソリューションを避けるように勧めるためではありませんが、他の方法では発見できなかった可能性のある言語の部分につながることが多いため、短いソリューションを時々自由に探索することをお勧めするためだけです。

于 2012-04-09T21:23:39.070 に答える