@l4m3r

Почему приоритет операторов не соответствует оф. таблице?

Приоритет операторов
function f($n)
{
    echo "f($n) ";
    return $n;
}


  1. f(1) && f(2) / f(3);
    Результат: f(1) f(2) f(3), хотя у / приоритет выше


  2. f(1) ?? f(2) ?? f(3) ?? f(4);
    Результат: f(1), хотя написано, что ассоциативность правая


  3. f(1) || (f(2) + f(3))
    Результат: f(1), я знаю про эту оптимизацию, однако, в официальной таблице про это не слово

  • Вопрос задан
  • 117 просмотров
Пригласить эксперта
Ответы на вопрос 2
@xtress
Web-dev
Вы путаете приоритет операторов с "приоритетом выполнения" (на самом деле не знаю как это обозвать). Для того, чтобы выполнить арифметические/логические операции, надо сначала получить результаты вызова функций. Только после этого будут выполняться арифметические/логические операции. А в таблицах нет ни слова, т.к. для второго и третьего примеров после выполнения `f(1)` не имеет смысла исполнять остальные вызовы.
Ответ написан
FanatPHP
@FanatPHP
Чебуратор тега РНР
1. Не знаю. Скорее всего, все так, как написал xtress. То, как операторы выполняются, и в каком порядке из результаты используются - это разные вещи.
2. На самом деле написано, что "Рекомендуется избегать "нагромождения" тернарных выражений. Поведение PHP неочевидно при использовании нескольких тернарных операторов в одном выражении"
3. Таблица не при чем, поскольку "эта оптимизация" не относится к приоритетам. https://phpdelusions.net/articles/or_die
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы