0

次の行があります。

$var = true ? '1' : false ? '2' : '3';

PHP では、$varこの行の後に '2' になります。

ただし、他の一部の言語 (特に C ベースの言語) では、結果変数は「1」になります。

PHP はこの行を次のように解釈するようです。

$var = (true ? '1' : false) ? '2' : '3';

しかし、他の言語は次のようにします:

string var = true ? '1' : (false ? '2' : '3');

私は実際にオペレーターの優先順位について混乱しています。

どんなアイデアでも役に立ちます。

4

2 に答える 2

2

三項演算子?:のみに関しては?:、PHP の結合性は、同じ構造を提供する他の言語とは異なります。PHP では左結合?:の言語では右結合です。この動作は不適切な設計によるものであり、このバグ レポートに従って修正される予定はありません。

参照:

于 2013-09-07T06:05:41.393 に答える
1

これは結合性の違いによるもので、その言語で式がどのように解析されるかを意味します。

中括弧を使用して指定しない場合、演算子の優先順位とその結合性について教えてくれる重要なリンクが 2 つあります。

PHP マニュアル : http://php.net/manual/en/language.operators.precedence.php

その他http://www.tuxradar.com/practicalphp/3/12/7 ここに画像の説明を入力 http://www.programiz.com/c-programming/precedence-associativity-operators

http://en.wikibooks.org/wiki/Introduction_to_Programming_Languages/Precedence_and_Associativityには、言語の動作に関する優れた記事があります。

于 2013-09-07T06:12:15.307 に答える