
web - tec / PHP 5 для начинающи
.pdf
702 Приложение А
function order_menu(){
$PHP_SELF = $_SERVER['PHP_SELF'];
?>
<HTML> <HEAD><TITLE>Рестораны</TITLE></HEAD>
<BODY>
<DIV ALIGN="CENTER"><CENTER>
<H2>Добро пожаловать в "Nandos", <?php echo $_GET['userfirstname']; ?>!</H2> </CENTER></DIV>
<FORM method="GET" action="<?php echo $PHP_SELF ?>">
<INPUT |
TYPE="HIDDEN" NAME="action" VALUE="order"> |
Крылышки: |
$1.50 |
<INPUT name="Choice1" type="checkbox" value="1.50"> |
|
<BR> |
|
Гамбургер: |
$3.00 |
<INPUT name="Choice2" type="checkbox" value="3.00">
<BR>
Безалкогольный напиток: $0.75
<INPUT name="Choice3" type="checkbox" value="0.75"> <BR>
<BR>
<INPUT type="submit" value="Заказать"> </FORM>
</BODY>
</HTML>
<?php
}
function place_order(){
global $default_dbname, $max_menu_items; $PHP_SELF = $_SERVER['PHP_SELF']; $link_id = db_connect($default_dbname); $total = 0;
for ($counter = 1; $counter <= 10; $counter ++)
{
$a = "Choice" . "$counter"; if (isset($_GET[$a])){ $total += $_GET[$a];
}
}
$query = "INSERT INTO Orders VALUES (", '$_SESSION[userid]', 'Nandos', $total)";
$result = mysql_query($query);
if(!$result) die ("Заказ не принят. Попробуйте еще раз.");
else {
//В реальной системе здесь должен быть выполнен переход на
//страницу подтверждения, простое обновление страницы
//приводит к дублированию заказа.
echo "Ваш заказ принят и будет выполнен в течение часа. Общая стоимость заказа: \$$total";
?>
<FORM method="GET" action="<?php echo $PHP_SELF ?>"> <INPUT type="submit" value="На главную">
</FORM>
<?php
}
}
function customer_session(){ $_SESSION['useremail'] = $_GET['useremail'];

Ответы 703
register_user(); $userid = get_userid();
$_SESSION['userid'] = $userid;
}
session_start(); session_register("userid", "useremail"); if (empty($_GET['action'])){
$_GET['action'] = "";
}
switch($_GET['action']) { case "order":
place_order(); break;
case "register": customer_session();
order_menu(); break;
default: login_form();
break;
}
?>
Глава 12
Упражнение 1
В чем разница между классом и объектом?
Решение
Класс подобен чертежу, в котором лишь указаны инструкции для создания объек+ та. Объект представляет собой экземпляр класса. Классы используются во время раз+ работки, в ходе изменения кода в PHP+файле. Объекты используются во время вы+ полнения программы, когда присваиваются или изменяются значения свойств и вызываются методы. Класс представлен текстом в текстовом файле. Объект сущест+ вует в памяти в виде инструкций.
Упражнение 2
Объясните идею наследования и дайте пример того, когда его следует использо+ вать, не повторяя при этом примеров, рассмотренных в данной главе.
Решение
Наследование ++++++ способность объекта приобретать свойства и методы родитель+ ского объекта. Наследование подразумевает связанную иерархию и повторное ис+ пользование кода. Дочерний класс ++++++ более специализированная версия родительско+ го класса, имеющая дополнительные методы и свойства и/или другую реализацию тех же методов и свойств. В дочернем классе не может быть меньше методов или свойств, чем в родительском. Примером наследования может быть связь между по+ звоночными животными и млекопитающими. Все позвоночные животные имеют позво+ ночник, состоящий из множества позвоночных костей, окружающих спинной мозг,



706 Приложение А
Рис. A.1.
Упражнение 2
Используя функции disk_total_space() и disk_free_space(), покажите графическим способом объем используемого пространства на жестком диске.
Решение
Существует два очевидных способа графического отображения результатов этого упражнения. Самый простой и быстрый способ ++++++ создать скользящую шкалу: прямо+ угольник, состоящий из двух цветных блоков, один из которых представляет исполь+ зуемое пространство на диске, а второй ++++++ свободное пространство. Это позволит создать компактную диаграмму использования дискового пространства. Ниже под+ робно разбирается код (файл exercise2a.php) для решения этой задачи.
Хорошей методикой всегда считалось хранение значений ширины и высоты изо+ бражений в сценарии. Изменить впоследствии размер изображения можно будет в начале сценария, в результате чего все вычисления ширины и высоты будут автома+ тически обновлены.
<?php
$iWidth = 500; $iHeight = 50;



Ответы 709
Чтобы нарисовать дугу, представляющую свободное пространство, начните с того места, где заканчивается область занятого пространства, т.е. с $usedDegree, и про+ должайте рисовать дугу до 360 градусов, до конца круга:
imagefilledarc($myImage, ($iWidth/2), ($iHeight/2), $iWidth - 2, $iHeight - 2, $usedDegrees, 360, $green, IMG_ARC_EDGED);
Завершаем сценарий как обычно:
header("Content-type: image/png"); imagepng($myImage); imagedestroy($myImage);
?>
Результат выполнения сценария показан на рис. A.3.
Рис. A.3.

