При обсуждении различного рода математических операторов неизбежно воз
никает вопрос приоритета порядка выполнения действий при вычислениях.
Например, какое значение будет иметь следующая переменная:
$Number = 1 0 4 / 2 ;
Будет ли результатом число 3 (сначала вычитаем, потом делим) или 8 (сна
чала делим, потом вычитаем)? Правильный ответ 8, так как деление имеет
приоритет над вычитанием. В приложении С представлен список приоритетов
операторов в РНР (включая не упомянутые здесь).
Однако вместо заучивания большой таблицы символов я бы порекомендо
вал использовать скобки, которые всегда имеют приоритет над другими опера
торами:
$Number = ( 1 0 4 ) / 2;
$Number = 10 (4 / 2);
В первом примере переменная теперь равна 3, а во втором 8. Использова
ние скобок гарантирует, что вы не получите странных результатов вычислений.
Можно переписать сценарий, объединив многочисленные строки в одну,
при этом поддерживая порядок вычислений с помощью скобок.
Листинг 4.4 т Вместо выполнения вычислений на нескольких строках, мы
сделали это на одной, не нарушив математических принципов. Используя скоб
ки, можно не беспокоиться о приоритетах операторов.
1 <HTML>
2 <HEAD>
3 <TITLE>Using Numbers</TITLE>
4 </HEAD>
5 <BODY>
6 <?php
7 /* Переменная $Quantity должна быть передана в эту страницу из формы.
$Discount необязательна. */
8 $Cost = 2000.00;
9 $Тах = 0.06;
10 $Тах++; // Налог ($Тах) 1.06.
11 $TotalCost = (($Cost * $Quantity) $Discount) * $Tax;
12 $Payments = $TotalCost /12;
13 // Печать результатов.
14 print ("You requested to purchase $Quantity widget(s)at $$Cost
each. rxP>") ;
15 . print ("The total with tax, minus your $$Discount, comes to $");
16 printf ("%01.2f", $TotalCost);
17 print (" n<P>You may purchase the widget(s) in 12 monthly
installments of $");
18 printf ("%01.2f", $Payments);
19 print (" each.n<P>");
20 ?>
21 </BODY>
22 </HTML>
Установление приоритета с помощью скобок
- Откройте файл numbers.php в текстовом редакторе.
- Измените строку 13 следующим образом (листинг 4.4):
- Удалите строки 10 и 12. Так как вычисление происходит на одной строке,
эти две больше не нужны. - Сохраните сценарий, загрузите его на сервер и протестируйте в браузере
(рис.).
STotalCost = (($Cost * $Quantity) . $Discount) * $Tax;
Вполне можно выполнить все вычисления разом, если вы используете скоб
ки для установки приоритетов. Другой вариант выучить правила приорите
тов в РНР, но намного легче использовать скобки.
Следите за правильностью использования скобок при создании формул (каждая
открывающая скобка должна иметь закрывающую).