Operator Precedence
Часть раздела Основы путешествия по PHP на Coddy — урок 20 из 71.
Когда выражение содержит несколько операторов, PHP следует определённому порядку, называемому приоритетом операторов. Как и в математике, умножение и деление выполняются перед сложением и вычитанием.
<?php
echo 5 + 3 * 2; // Выводит: 11, не 16
?>PHP сначала умножает 3 × 2 (получая 6), затем прибавляет 5. Если бы операторы имели равный приоритет, оно вычисляло бы слева направо: 5 + 3 = 8, затем 8 × 2 = 16. Но это работает не так.
Вот порядок приоритетов от высшего к низшему для операторов, которые вы изучили:
| Приоритет | Операторы |
| Высший | ** (возведение в степень) |
| Высокий | * / % |
| Низкий | + - |
Чтобы переопределить порядок по умолчанию, используйте круглые скобки. Операции внутри скобок всегда вычисляются первыми:
<?php
echo (5 + 3) * 2; // Выводит: 16
echo 2 ** 3 * 2; // Выводит: 16 (8 * 2)
echo 2 ** (3 * 2); // Выводит: 64 (2^6)
?>Если сомневаетесь, используйте скобки, чтобы сделать свои намерения ясными. Это делает ваш код легче для чтения и предотвращает неожиданные результаты.
Задание
ЛегкоПрочитайте три числа из ввода: a, b и c.
Вычислите и выведите результат следующего выражения, используя скобки, чтобы гарантировать, что сложение происходит перед умножением:
(a + b) * c ** 2
Это означает: сначала сложите a и b, затем умножьте эту сумму на c, возведённое в степень 2.
Пример:
Если входные данные 2, 3 и 4, то вывод должен быть 80, потому что:
- Сначала сложите 2 + 3 = 5
- Затем вычислите 4 ** 2 = 16
- Наконец, умножьте 5 * 16 = 80
Шпаргалка
PHP следует правилам приоритета операторов при вычислении выражений с несколькими операторами:
| Приоритет | Операторы |
| Наивысший | ** (возведение в степень) |
| Высокий | * / % |
| Низкий | + - |
<?php
echo 5 + 3 * 2; // Outputs: 11 (multiplication first)
?>Используйте скобки, чтобы изменить порядок по умолчанию. Операции внутри скобок вычисляются первыми:
<?php
echo (5 + 3) * 2; // Outputs: 16
echo 2 ** 3 * 2; // Outputs: 16 (8 * 2)
echo 2 ** (3 * 2); // Outputs: 64 (2^6)
?>Попробуйте сами
<?php
// Чтение ввода
$a = intval(fgets(STDIN));
$b = intval(fgets(STDIN));
$c = intval(fgets(STDIN));
// TODO: Напишите свой код ниже для вычисления (a + b) * c ** 2
// Вывод результата
echo $result;
?>В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
4Comparison & Logical Operators
Comparison OperatorsEquality & IdentityLogical Operators Part 1Logical Operators Part 2Recap - Simple Logic2Variables and Data Types
NumbersStrings and QuotesBooleansNaming ConventionsRecap - Variable InitEmpty VariablesString ConcatenationGetting User InputCast to Different Types5Conditional Logic
If StatementIf - ElseThe Ternary OperatorNull Coalescing OperatorSwitch StatementRecap - Making Decisions3Basic Operators
Arithmetic OperatorsModulo OperatorExponentiation OperatorCombined AssignmentIncrement/DecrementOperator PrecedenceRecap - Simple CalculationsString Operators