2013-09-07 3 views
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'); 

Im действительно путают о приоритетах оператора.

Любые идеи помогут.

+0

Только PHP имеет то странное ассоциативность о тройном оператора. – nhahtdh

+1

Мне нравится ваше наблюдение, но не уверен в вашем замешательстве. Нелегко ли ответить, что разные языки имеют разные способы интерпретации и, следовательно, производят разные результаты ... –

+0

Считается ли это ошибкой? или такие различия обычны? – MeeDNite

ответ

2

Относительно только тернарного оператора ?: ассоциативность ?: в PHP отличается от остальных языков, которые предлагают ту же конструкцию. ?: is левый ассоциативный в PHP, и правый ассоциативный на других языках. Такое поведение связано с плохим дизайном, и оно не будет исправлено в соответствии с this bug report.

Ссылка:

1

Это происходит из-за разницы в ассоциативности, значит, как выражение обрабатывается на этом языке,

есть два важное звено, которое может сказать и \ вы о приоритете оператора и его ассоциативности, если вы не укажете, используя фигурные скобки.

Руководство по PHP: http://php.net/manual/en/language.operators.precedence.php

другие http://www.tuxradar.com/practicalphp/3/12/7 enter image description here http://www.programiz.com/c-programming/precedence-associativity-operators

и есть хорошая статья о поведении языка на http://en.wikibooks.org/wiki/Introduction_to_Programming_Languages/Precedence_and_Associativity

Смежные вопросы