3

最初の変数が (bool)false または未定義の場合は、2 番目の変数の値を使用して、2 つの変数のいずれかを 3 番目の変数に割り当てる必要があります。

私は通常、次のように三項表記を使用してこれを行います。

$foobar = ($some_prefix_and_some_variable_name) ? $some_prefix_and_some_variable_name : $bar ; 

しかし、$foo 変数名が非常に長い場合、この表記法で繰り返す必要があるため、これはあまりきれいではありません。

私の質問は今、この表記法を使用するのと同じくらい良いですか?

$foobar = $some_prefix_and_some_variable_name OR $foobar = $bar;

この表記法は 3 進バージョンと互換性がありますか?

4

5 に答える 5

7

PHP 5.3 には、短い 3 進表記もあります。

$foobar = $fooooooooooooooooooooooooo ?: $bar ;
于 2011-06-16T20:31:28.300 に答える
5

は次のように評価されるため$foobar = $foo OR $foobar = $bar;:

foo を foobar に割り当てます。
*そこに価値はありますか?
   * そうでない場合は、bar を foobar に割り当てます。

もう一方は次のように評価されます。

foo に値はありますか?
* その場合は foobar = foo を割り当てます * そうでない場合
は foobar = bar を割り当てます

最初の例では、!foo の場合は 2 回割り当てていますが、foo の場合は高速になります。2 番目の例では、合計 1 回だけ値を設定しています。ただし、速度の違いはごくわずかであることに賭けます。

ここでのより大きな問題は読みやすさです。5.3 の短い表記が利用できない場合でも、他のプログラマーがそれを期待しているという理由だけで、私はまだ 3 進表記を使用します。

さらに言えば、従来の 3 項構文を使用することで、より多くの時間とお金を節約できます。それは、人々があなたのコードを見たときに、自分自身に尋ねることがないからです。

于 2011-06-16T20:35:47.877 に答える
4

PHP 5.3以降、これには特別な演算子があります。

$foobar = $fooooooooooooooooooooooooo ?: $bar;

三項演算子のドキュメントから:

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

于 2011-06-16T20:32:20.753 に答える
1

速度の問題で、これは:

$foobar = $fooooooooooooooooooooooooo OR $foobar = $bar;

それはより速いです

于 2011-06-16T20:30:37.267 に答える
0

いいえ。2つの表記が交換可能かどうかはわかりません。つまり、2番目の表記は使用しないでください。それらが実際に同じであるかどうかにかかわらず、コードが何をするかがすぐに明確でない場合(この場合のように)、他の誰もこのコードを更新する必要がないことが絶対に確実でない限り、コードを変更する必要があります。それが書かれているのを見たら、こんな感じなのか、タイプミスなのかわからず、バグが発見されなかった(何度も見た!)。

理想的には、変数名が非常に長い場合は、次のようにする必要があります。

if($fooooooooooooooooooooooooo){
    $foobar =$fooooooooooooooooooooooooo;
} else {
    $foobar = $bar;
}

速度が重要でない限り、読みやすくするためです。速度が重要な場合は、三項演算子を使用する必要があります。

于 2011-06-16T20:32:54.613 に答える