web-dev-qa-db-ja.com

PHP略記の場合

他の文字列を追加したい文字列があります。まあ言ってみれば:

$my_string = 'Hello';

$my_string .= ' there';

これは「こんにちは」を返します。

私はこれを次のように条件付きにしたい:

$my_string = 'Hello';

$append = 'do';

if ( $append == 'do' ) {

    $my_string .= ' there';

}

さて、これを行うために三項演算を使用したいのですが、私が遭遇したすべての例は、if/elseが次のようになる場合のものです。

$my_string .= ( $append == 'do' ) ? ' there' : '';

それで、IFだけでそれを行うことは可能ですか?

ありがとう。

15
medk

いいえ...三項とは、条件が必要な3つの部分、真の部分、および偽の部分を意味します

18
Bueller

いいえ。ただし、逆の可能性もあります。 PHPドキュメントからの引用です:

PHP 5.3なので、三項演算子の中央部分を省略できます。式expr1?:expr3はexpr1がTRUEと評価された場合はexpr1を返し、それ以外の場合はexpr3を返します。

http://php.net/manual/en/language.operators.comparison.php

24
Andz

mellamokbとAndzを組み合わせると、次のことができます。

( $append != 'do' ) ?: $my_string .= ' there';
16
Jacob Eggers

条件をチェックしてから文字列に追加する別の方法は次のとおりです。

 ($append == 'do')  and  ($my_string .= ' there');

しかし、それは実際にはif変位にすぎません。しかし、「他のない三項」に近づいています。

5
mario

あなたはこれを行うことができます:

( $append == 'do' ) ? $my_string .= ' there' : $noop ;

三項が割り当ての内側ではなく外側になるようにステートメントを反転すると、ステートメント全体をTRUE部分に配置してから、ELSE部分で操作なしのコマンドを実行できます。

4
mellamokb

コードを短くすることを検討している場合は、同じことを1行で書くことができます。

if ($append == 'do') {$my_string .= ' there';}

[〜#〜]編集[〜#〜]

私はこれを発見したばかりで、役に立つと思いました。このようにifブロックを書くこともできます

if ($append == 'do') $my_string .= ' there';
3
astroanu

やりたいことをする関数を作ることができます。毎回ifステートメントを書き出す代わりに。

function doAppend($doIt, &$value, $appendValue)
{
    if($doIt) $value .= $appendValue;
}

それを呼び出す:

doAppend($append == 'do', $my_string, ' there');

2番目のパラメーターは参照によるものであるため、呼び出し元のコードでも変更されることに注意してください。

1
zsalzbank

簡単で非常に効果的な方法は、返すものがない場合にTRUEFALSE値を使用することです。引数があるだけでなく、次のように、必要な正確な値で返すことができます。

$my_string .= ( $append == 'do' ) ? ' there' : true;
1
Nilesh

Else/false部分なしで三元を使用することはできませんが、すべてを1行にすることが目的である場合は、この代替手段を試すことをお勧めします。

($append == 'do' && $my_string .= ' there');

最初のステートメントが真の場合、2番目のステートメントに進みます。それ以外の場合は、最初の評価の結果がfalseになった後で停止します。

遅延評価を参照してください(いわゆる 短絡評価

または、trueifの部分を空のままにして、反対のことを行い、falseだけを宣言することもできます。 Andzが正しく指しているように。

1
Kamafeather