В большинстве своем операторы РНР и типы переменных, которые в них ис
пользуются, описывались в предыдущих главах. Это арифметические операто
ры сложения (+), вычитания (), умножения (*) и. деления (/), а также опера
торы инкремента (+ + ) и декремента (—) для увеличения и уменьшения
числового значения на единицу. Это также оператор присвоения (=), использу
емый для задания значения переменной любого типа. Мы обсудили и оператор
сцепления (.), используемый для соединения строк.
Все указанные операторы хороши для присвоения значения переменной,
но от них мало пользы, когда дело касается условных выр
Операторы сравнения
В главе 2 был представлен оператор присвоения (знак равенства). При этом
оговаривалось, что значение оператора несколько необычно. Выражение
SVariable = 5; означает не то, что переменная SVariable равна 5, а то, что ей
присвоено значение 5,
При программировании условий часто необходимо знать, равна ли пере
менная конкретному значению (например, при проверке имени пользователя
или пароля), что нельзя сделать с помощью одного знака равенства (тем более
что он уже занят оператором присвоения). Для этих целей используется опера
тор равенства (==), состоящий из двух знаков равенства подряд.
SVariable = 5;
SVariable == 5;
При совместном использовании этих строк кода первая строка присваива
ет переменной SVariable значение 5, а затем «говорит», что результат исти
нен, когда «видит», что значение SVariable равно 5. Это доказывает, какую зна
чительную разницу вносит дополнительный знак равенства в код РНР и почему
необходимо проводить четкую границу между операторами присвоения и срав
нения.
Оператор неравенства в РНР представлен комбинацией из восклицательно
го знака и знака равенства (! =). Вообще восклицательный знак показывает от
рицание значения, функцию логическое нет. SVariable означает, что перемен
ная SVariable существует и имеет значение, отличное от нуля, а ! SVariable
что переменная SVariable не существует, не имеет значения или ее значение
равно нулю.
Остальные операторы сравнения аналогичны математическим эквивален
там: меньше (<)’, больше (>), меньше или равно (<=), больше или равно (>=).
Расширим функциональность программы расчета стоимости товара, пере
писав сценарий nunlbers.php так, чтобы скидка применялась только при закуп
ке на сумму больше .
Использование операторов сравнения
- Откройте текущую версию numbers.php (листинг 6.2) в текстовом редак
торе. - Снизьте цену единицы товара, чтобы было не так просто дойти до иско
мого рубежа в , строка 8. - После строки 13 измените выражение с STotalCost следующим образом:
- Создайте условие, проверяющее, превысила ли общая сумма .
- Добавьте к общей сумме налог.
- Оставшаяся часть сценария осталась неизменной, включая определение
ежемесячных взносов и печать всех результатов. - Сохраните сценарий (листинг 6.3), загрузите его на сервер и протести
руйте в браузере с помощью разных значений переменной $Quantity
(рис.).
SCost = 2 0 . 0 0 ;
STotalCost = (SCost * SQuantity);,
Так как скидка применима лишь для общей суммы покупки свыше , то
сначала необходимо отдельно рассчитать эту общую сумму
if (STotalCost >= 50) {
STotalCost = STotalCost SDiscount;
{
Используя операторы сравнения внутри выражения условия, можно опре
делить, что скидка будет предоставлена, только если значение $TotalCost боль
ше или равно (не указывайте знак доллара в условии). Скидка вычитается,
только если условие истинно.
$TotalCost = $TotalCost * $Tax,
Листинг 6.3 т Операторы сравнения, такие как «меньше или равно» (<=),
позволяют лучше задавать числовые условия в коде.
1 <HTML>
2 <HEAD>
3 ,, <TITLE>Conditionals</TITLE>
4 </HEAD>
5 <BODY>
6 <?php
7 /* Переменная $Quantity должна быть передана в эту страницу из формы.
$Discount необязательна. */
8 $Cost = 20,00;
9 $Тах = 0.06;
10 if ($Quantity) { '
11 SQuantity = abs($Quantity);
12 $Discount = abs($Discount);
13 $Tax++; // $Tax составляет 1.06.
14 $TotalCost = ($Cost * $Quantity);
15 if ($TotalCost >= 50) {
16 $TotalCost = $TotalCost $Disoount;
17 }
18 $TotalCost = $TotalCost * $Tax;
19 $Payments = round ($TotalCost, 2) /12;
20 // Печать результатов.
21 print ("You requested to purchase $Quantity widget(s) at $$Cost
each.n<P>");
22 print ("The total with tax, minus your $$Discount, comes to $");
23 prlntf ("%01.2f", $TotalCost);
24 print (".n<P>You may purchase the widget(s) in 12 monthly
installments of $");
25 printf ("%01.2f", $Payments);
26 print (" each.n<P>");
27 }
28 ?>
29 </BODY>
30 </HTML>
Если в выражениях с условным оператором if делается ошибка и вместо
$Variable == 5 пишется $Variable = 5, то соответствующие условию ин
струкции будут выполняться всегда. Это происходит потому, что оператор срав
нения $Variable == 5 может быть истинным или ложным, а оператор присвое
ния $Variable = 5 всегда выдает истину, если справа от знака равенства стоит
ненулевое значение.