Какой приоритет у оператора => определения элемента массива?
Какой приоритет у оператора => определения элемента ассоциативного массива? В частности, интересует приоритет относительно оператора ??. Всегда ли 'a' => obj->id ?? 0 означает 'a' => (obj->id ?? 0)? В документации об этом ничего не написано.
Евгений Обыкновенный, Нет, у оператора присваивания есть результат - присвоенное значение. $x = $y = 5 Здесь у операции $y = 5 результат 5, который присваивается $x.
А какой результат у 'a' => 1? Никакого. Поскольку это только часть языковой конструкции array(), представляющей литерал массива.
Нет, у оператора присваивания есть результат - присвоенное значение
Результат операции присваивания - это занесение какого-то значения в переменную. А цепочки присваиваний - это уже побочный синтаксический сахар, который не во всех языках есть.
Здесь у операции $y = 5 результат 5, который присваивается $x.
А здесь $arr = ['a' => 1] у операции 'a' => 1 результат 1, который присваивается по адресу $arr['a'].
Более того, инструкции с => выполняются пошагово. Например, если здесь ['a' => divto(0), 'b' => divto(1)] во время выполнения функция divto(0) бросит ошибку, то до divto(1) очередь не дойдет.
Rsa97, оператор не обязан возвращать значение, пригодное для присваивания. Например, не работает конструкция x := (y := z) в паскале, не работает конструкция mov ax, (mov bx, cx) в ассемблере. Это же не значит, что := и mov не операторы.
Евгений Обыкновенный, И? Присваивание в паскале не является оператором и не приводится в таблице приоритетов. А в ассемблере операторов вообще нет, там инструкции.
Что касается PHP, то документация говорит следующее:
An operator is something that takes one or more values (or expressions, in programming jargon) and yields another value (so that the construction itself becomes an expression).
array() is a language construct used to represent literal arrays, and not a regular function.
Rsa97, видимо, мы используем разные определения оператора. В англоязычной традиции есть statement (любая минимальная инструкция языка) и operator (аналог математической операции с операндами, который возвращает какое-то значение). На русском все это часто называют оператором, даже условные операторы.
Евгений Обыкновенный, Если мы говорим о PHP, то и определение надо использовать из PHP. И, раз PHP не относит конструкцию key => value к операторам, то искать её в списке приоритетов операторов смысла нет.