4
   
                戻る
                    本当?'a':
                    false?'b':
                                                           'c';

これは「a」を返すはずですが、そうではありません。代わりに「b」を返します。条件演算子のさまざまな部分を処理するPHPの順序にバグはありますか?

この状況で複数の条件演算子は良い考えですか?正しく機能しているように見えます。

(もちろん、trueとfalseは例の目的のためです。実際のコードでは、それぞれtrueとfalseに評価されるステートメントです。はい、確かにそれを知っています)

4

4 に答える 4

8

三項式を「積み重ねる」ことは避けることをお勧めします。単一のステートメント内で複数の三項演算子を使用した場合の PHP の動作がわかりにくい

「非自明な三項動作」の下のPHPマニュアルから。

三項演算子は左から右に評価されるため、中かっこを追加しない限り、期待どおりに動作しません。以下は機能しますが、

return (true ? "a" : (false ? "b" : "c"));
于 2009-12-17T12:35:25.627 に答える
6

2番目の三項演算子への入力として評価(true ? 'a' : false)され、「a」が真であると解釈されていると思われます。適切にブラケットを試してください。

于 2009-12-17T12:30:08.147 に答える
3

操作の順序:

>>> return true ? 'a' : false ? 'b': 'c';
'b'
>>> return true ? 'a' : (false ? 'b': 'c');
'a'
于 2009-12-17T12:29:42.813 に答える
0

私に説明されたのと同じように説明しましょう。ただし、何が起こっているのかを理解するには、括弧内に注意を払う必要があります。

PHP

以下のPHPコード

true ? "a" : false ? "b" : "c"

以下と同等です。

(true ? "a" : false) ? "b" : "c"

他の言語

以下のコード

true ? "a" : false ? "b" : "c"

以下と同等です。

true ? "a" : (false ? "b" : "c")
于 2016-12-21T18:59:14.813 に答える