PHP: Композиция операций
В PHP, как и в математике, можно объединять несколько операций в одну строку. Такие выражения интерпретатор обрабатывает шаг за шагом, по определенным правилам. Это свойство операций называется композицией.
Рассмотрим пример:
<?php
print_r(2 * 4 * 5 * 10);Этот код состоит из нескольких операций умножения, объединенных в одно выражение. Чтобы понять, как интерпретатор выполняет выражение, разберем его по этапам:
- Сначала вычисляется
2 * 4:8 * 5 * 10 - Затем
8 * 5:40 * 10 - И наконец
40 * 10:400
Итоговый результат составляет 400.
А если разные операции?
Все просто, пока используются одинаковые операторы. Но что произойдет, если объединить, например, умножение и сложение?
<?php
print_r(2 + 3 * 4);2 + 3 * 4
└─┬─┘
2 + 12
└──┬───┘
14Получится ли 20 или 14? Ответ: 14.
Это объясняется тем, что в PHP, как и в математике, у операций есть приоритет. Умножение выполняется раньше сложения, если не использовать скобки. Мы разберем это подробнее в уроке про приоритеты.
Примеры с вычитанием и отрицательными числами
То же правило работает и для вычитания:
<?php
print_r(10 - 2 * 3); // => 4Сначала выполняется умножение: 10 - 6 = 4.
Если же в выражении есть отрицательные числа, унарный минус применяется уже после возведения в степень:
<?php
print_r(-2 ** 2); // => -4, два в степени два, затем применяется минус
print_r(-2 * 5); // => -10, минус два умноженное на пять
print_r(4 + -2); // => 2
print_r(6 - -2); // => 8Во всех примерах, кроме первого, сначала вычисляется унарный минус (-2), и затем проводятся остальные операции.
Рассмотрим подробнее последний пример:
<?php
print_r(6 - -2); // => 8Сначала вычисляется унарный минус (-2), и затем операция превращается в 6 - (-2), что дает 8. Это то же самое, что:
<?php
print_r(6 + 2); // => 8Что нужно запомнить
- Выражения могут состоять из нескольких операций.
- PHP вычисляет их поэтапно: слева направо, соблюдая приоритет операций.
- Скобки можно использовать, чтобы явно указать порядок вычислений.
Задание
Вы идете в магазин за подарками: 3 книги по 200 рублей и 2 ручки по 30 рублей. Рассчитайте и выведите итоговую стоимость покупки.
3 * 200 + 2 * 30
↓ ↓
600 + 60 = 660Не вычисляйте ничего самостоятельно, ваша программа должна производить все вычисления сама.
PHP: Композиция операций
В PHP, как и в математике, можно объединять несколько операций в одну строку. Такие выражения интерпретатор обрабатывает шаг за шагом, по определенным правилам. Это свойство операций называется композицией.
Рассмотрим пример:
<?php
print_r(2 * 4 * 5 * 10);Этот код состоит из нескольких операций умножения, объединенных в одно выражение. Чтобы понять, как интерпретатор выполняет выражение, разберем его по этапам:
- Сначала вычисляется
2 * 4:8 * 5 * 10 - Затем
8 * 5:40 * 10 - И наконец
40 * 10:400
Итоговый результат составляет 400.
А если разные операции?
Все просто, пока используются одинаковые операторы. Но что произойдет, если объединить, например, умножение и сложение?
<?php
print_r(2 + 3 * 4);2 + 3 * 4
└─┬─┘
2 + 12
└──┬───┘
14Получится ли 20 или 14? Ответ: 14.
Это объясняется тем, что в PHP, как и в математике, у операций есть приоритет. Умножение выполняется раньше сложения, если не использовать скобки. Мы разберем это подробнее в уроке про приоритеты.
Примеры с вычитанием и отрицательными числами
То же правило работает и для вычитания:
<?php
print_r(10 - 2 * 3); // => 4Сначала выполняется умножение: 10 - 6 = 4.
Если же в выражении есть отрицательные числа, унарный минус применяется уже после возведения в степень:
<?php
print_r(-2 ** 2); // => -4, два в степени два, затем применяется минус
print_r(-2 * 5); // => -10, минус два умноженное на пять
print_r(4 + -2); // => 2
print_r(6 - -2); // => 8Во всех примерах, кроме первого, сначала вычисляется унарный минус (-2), и затем проводятся остальные операции.
Рассмотрим подробнее последний пример:
<?php
print_r(6 - -2); // => 8Сначала вычисляется унарный минус (-2), и затем операция превращается в 6 - (-2), что дает 8. Это то же самое, что:
<?php
print_r(6 + 2); // => 8Что нужно запомнить
- Выражения могут состоять из нескольких операций.
- PHP вычисляет их поэтапно: слева направо, соблюдая приоритет операций.
- Скобки можно использовать, чтобы явно указать порядок вычислений.
Задание
Вы идете в магазин за подарками: 3 книги по 200 рублей и 2 ручки по 30 рублей. Рассчитайте и выведите итоговую стоимость покупки.
3 * 200 + 2 * 30
↓ ↓
600 + 60 = 660Не вычисляйте ничего самостоятельно, ваша программа должна производить все вычисления сама.
Ваше упражнение проверяется по этим тестам
<?php
namespace HexletBasics\Arithmetics\Composition;
use HexletBasics\Exercise\TestCase;
class SolutionTest extends TestCase
{
public function test()
{
$expected = '660';
$this->assertOutput($expected);
}
}Решение учителя откроется через:
20:00
