Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

PHP Прокомментировать

Boss Мастер (1438), на голосовании 13 лет назад
В строке "$assoc = 3 * 3 % 5;" используется сразу 3 оператора: присвоение "=", умножение "*" и деление по модулю "%". Из таблицы видно, первый оператор в выражении (считается слева-направо) - присвоение. Это "правый" и наименее приоритетный оператор, значит в первую очередь надо вычислить правый операнд ("3 * 3 % 5"). Правый операнд - выражение с двумя "левые" операторами равного приоритета. Поэтому вычисление производится просто последовательно слева направо. Результат вычисления правого операнда становится операндом оператора присоения. Результат выполнения всех операций - переменная $assoc получает значение 4.

кто разъяснит значение этого текста, тому 100 рублей на телефон
Голосование за лучший ответ
dverZapili Мыслитель (5106) 13 лет назад
Тут и так разжевано больше некуда.
BossМастер (1438) 13 лет назад
Это "правый" и наименее приоритетный оператор - это про что?
Капитан Гугл Искусственный Интеллект (146261) "Правый" - значит, выполняется справа налево; "наименее приоритетный" - выполняется последним.
Петрина Александр Просветленный (34367) 13 лет назад
покольку приоритет операций равен, то выполнится сначала 3*3, потом от результат узнаем деление по модулю на 5 и окончательный результат присваиваем в переменную $assoc
BossМастер (1438) 13 лет назад
Это "правый" и наименее приоритетный оператор , значит в первую очередь надо вычислить правый операнд ("3 * 3 % 5") - про что говорит автор? Какой оператор он имеет ввиду?
Петрина Александр Просветленный (34367) правый - это значит справа от равно... там выполняются определенные операции и затем результат присваивается переменной... то есть сначала операции - поэтмоу выполняется то что справа, а затем уже присваивание
BossМастер (1438) 13 лет назад
Если первый (считается слева-направо) оператор в строке слева, почему он "правый"?
Капитан Гугл Искусственный Интеллект (146261) 13 лет назад
Старая задача: сколько будет 2+2*2? Ответ: 6. Почему? Потому что умножение выполняется раньше сложения, т. е. умножение приоритетнее.
Здесь - то же самое, только операций стало больше.
BossМастер (1438) 13 лет назад
Если первый (считается слева-направо) оператор в строке слева, почему он "правый"?
Капитан Гугл Искусственный Интеллект (146261) Потому что работает справа налево. Нельзя вычислить сначала левую часть, а потом правую.
Антон - Мыслитель (5315) 13 лет назад
Тут всё подробно расписано. Ассоциативность влияет на порядок вычисления операндов бинарных операторов.
Например,
(выражение1) оператор (выражение2)

Если ассоциативность левая, то вычисление идёт в "обычном" порядке, сначала левый операнд "выражение1", потом операнд "выражение2".
Если ассоциативность правая, то наоборот, сначала вычисляется правый операнд "выражение2", потом уже "выражение1".

В PHP подавляющее большинство операторов имеют левую ассоциативность. Даже операторы присваивания, которые в документации обозначены как правоассоциативные во многих случаях вычисляют сначала левый операнд.
BossМастер (1438) 13 лет назад
Последним комментарием вы меня окончательно сразили...
Антон - Мыслитель (5315) Обычно на практике эта особенность не имеет никакого значения. С трудом могу себе представить оператор присваивания, которому важен был бы этот порядок. Вот пример: $arr = array(); $i = 5; $arr[++$i] = $i; print_r($arr); Если бы соблюдалась правая ассоциативность присваивания, то этот код должен был бы вывести массив Array ( [6] => 5 ), тем не менее выводится Array ( [6] => 6 ) Просто не допускайте более чем одного изменения одной переменной на одну строку и вы не почувствуете разницы.
Похожие вопросы