11

私は三項演算子を頻繁に使用しますが、これに関するドキュメントで何も見つけることができず、いつも疑問に思っていました。

考えられる例は次のとおりです。

echo ($something->message ? $something->message : 'no message');

ご覧のとおり、$ something-> messageが正しければ、$ something-> messageを返しますが、なぜ2回書き込むのでしょうか。次のようなことを行う方法はありますか?

echo ($something->message ? this : 'no message');

今はプログラミング理論に精通していないので、前者を「これ」のようなもので参照できない理由があるのではないでしょうか。これは、三項演算子の使用を合理化しませんか?私の例のようなものでは、それはかなり役に立たないですが、それが

echo (function(another_function($variable)) ? function(another_function($variable)) : 'false');

私はこれを行う方法を見つけることができないので、それは不可能だと思います。間違っている場合は私に知らせてください。そうでない場合は、どうしてですか?なぜこれが不可能なのか、技術的な理由は何ですか、それとも決して起こらなかっただけなのですか?それを変数として宣言してから、その変数に対してテストする必要がありますか?

4

1 に答える 1

19

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

ソース

例えば

$used_value = function1() ?: $default_value;

と同じです

$check_value = function1(); //doesn't re-evaluate function1()
if( $check_value ) {
    $used_value = $check_value;
} else {
    $used_value = $default_value;
}

賢者への一言

型キャストに依存する場合は、何がTRUE型キャストされ、何が型キャストされないかを理解することが重要TRUEです。PHP の型ジャグリングをブラッシュアップし、型変換テーブルを読むことはおそらく価値があります。たとえば、(bool)array()ですFALSE

于 2010-08-27T00:09:37.417 に答える