1

もしあなたがphpで

echo (('a'=='a')?'A':('a'=='b')?'B':'C');

結果は次のようになります。

B

これはまったくのゴミです。PHPドキュメント(例#3)によると、これは

三項式は左から右に評価されます。

それは私にとってそれを本当に説明していません:左から右に評価する('a'=='a')ので、結果は'A'、いいえ!? phpがこれからどのように取得できるかを理解するのに本当に途方に暮れて'B'います。この種のステートメントは、非常に多くの言語で機能しますが、php では機能しません。ここでphpロジックを理解している人はいますか?これをphpで修正するにはどうすればよいですか?

4

2 に答える 2

1

左の式全体が評価されます。これらは同じです:

echo( ('a' == 'a') ? 'A' : ('a' == 'b')  ? 'B' : 'C');
echo((('a' == 'a') ? 'A' : ('a' == 'b')) ? 'B' : 'C');

以下の式は次のように評価されAます。

('a' == 'a') ? 'A' : ('a'=='b');

そして、このエクスプレスは次のように評価されBます。

('A' ? 'B' : 'C');

括弧を移動すると、式は期待どおりに評価されます。

echo(('a' == 'a') ? 'A' : (('a' == 'b') ? 'B' : 'C'));
于 2013-10-15T23:21:56.627 に答える
0

実験的に、

echo (('a'=='a')?'A':(('a'=='b')?'B':'C'))

出力

A

PHP 実装がoperator precedence:を台無しにして、 よりも高い優先順位を与えているように見える?ので、括弧なしで、

('a'=='a')?'A':('a'=='b')

は一緒にグループ化されているため、式は次のようになります。

('a'=='a')?'A':('a'=='b')?'B':'C'

に評価されます

('A'?'B':'C');

どちらの結果が得られますか'B'(そうで'A'はない0FALSEであり、そうであるTRUE)。

于 2013-10-15T23:32:43.673 に答える