﻿<?php
echo "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">\n";
echo "<HTML><HEAD><TITLE></TITLE>\n";
echo "<META content=\"TEXT/HTML; CHARSET=WINDOWS-1251\" http-equiv=CONTENT-TYPE>\n";
echo "<META content=\"Microsoft FrontPage 4.0\" name=GENERATOR>\n";
echo "<STYLE></STYLE>\n";
echo "</HEAD>\n";
echo "<body background=../FON.JPG>\n";
echo "<ul>\n";
echo "\n";
echo "  <li><a href=\"#a\"><font face=\"Times New Roman\" size=3>Глава 6.\n";
echo "    Объектно-ориентированные возможности PHP</font></a> </li>\n";
echo "  <ul>\n";
echo "    <li><a href=\"#b\"><font face=\"Times New Roman\" size=\"3\">PHP и ООП</font></a>\n";
echo "    </li>\n";
echo "    <li><a href=\"#c\"><font face=\"Times New Roman\" size=\"3\">Классы,\n";
echo "      объекты и объявления методов</font></a>\n";
echo "      <ul>\n";
echo "        <li><a href=\"#d\"><font face=\"Times New Roman\" size=\"3\">Создание\n";
echo "          объектов и работа с ними</font></a></li>\n";
echo "        <li><a href=\"#e\"><font face=\"Times New Roman\" size=\"3\">Нарушение\n";
echo "          инкапсуляции</font></a></li>\n";
echo "        <li><a href=\"#f\"><font face=\"Times New Roman\" size=\"3\">Конструкторы</font></a></li>\n";
echo "        <li><a href=\"#g\"><font face=\"Times New Roman\" size=\"3\">Деструкторы</font></a></li>\n";
echo "        <li><a href=\"#h\"><font face=\"Times New Roman\" size=\"3\">Простое и\n";
echo "          иерархическое наследование</font></a></li>\n";
echo "        <li><a href=\"#i\"><font face=\"Times New Roman\" size=\"3\">Абстрактные\n";
echo "          классы</font></a></li>\n";
echo "        <li><a href=\"#j\"><font face=\"Times New Roman\" size=\"3\">Перегрузка\n";
echo "          методов</font></a></li>\n";
echo "      </ul>\n";
echo "    </li>\n";
echo "    <li><a href=\"#k\"><font face=\"Times New Roman\" size=\"3\">Функции для\n";
echo "      работы с классами и объектами</font></a>\n";
echo "    </li>\n";
echo "    <li><a href=\"#l\"><font face=\"Times New Roman\" size=\"3\">Итоги</font></a>\n";
echo "    </li>\n";
echo "  </ul>\n";
echo "</ul>\n";
echo "<A NAME=\"a\"></A>\n";
echo "<p>&nbsp;</p>\n";
echo "<p><font color=\"#000000\" face=\"Times New Roman\" size=\"5\">ГЛАВА 6</font></p>\n";
echo "<p><font color=\"#000000\" face=\"Times New Roman\" size=\"5\">Объектно-ориентированные возможности РНР</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Если вы\n";
echo "ориентируетесь в современных технологиях\n";
echo "программирования, объектно-ориентированное\n";
echo "программирование (ООП) наверняка является\n";
echo "частью вашей повседневной работы. Если же\n";
echo "вы принадлежите к числу новичков в области\n";
echo "ООП, после чтения этой главы и рассмотрения\n";
echo "нескольких примеров программирование\n";
echo "предстанет перед вами совсем в новом свете.\n";
echo "Эта глава посвящена технологии ООП и ее\n";
echo "реализации в РНР. В ней описан весь\n";
echo "необходимый синтаксис и приводятся примеры,\n";
echo "которые позволят вам заняться созданием\n";
echo "объектно-ориентированных приложений.</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Стратегию\n";
echo "ООП лучше всего описать как смещение\n";
echo "приоритетов в процессе программирования от\n";
echo "функциональности приложения к структурам\n";
echo "данных. Это позволяет программисту\n";
echo "моделировать в создаваемых приложениях\n";
echo "реальные объекты и ситуации. Технология ООП\n";
echo "обладает тремя главными преимуществами:</font></p>\n";
echo "<ul>\n";
echo "  <li><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">она проста\n";
echo "    для понимания — ООП позволяет мыслить\n";
echo "    категориями повседневных объектов;</font></li>\n";
echo "  <li><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">повышенно\n";
echo "    надежна и проста для сопровождения —\n";
echo "    правильное проектирование обеспечивает\n";
echo "    простоту расширения и модификации\n";
echo "    объектно-ориентированных программ.\n";
echo "    Модульная структура позволяет вносить\n";
echo "    независимые изменения в разные части\n";
echo "    программы, сводя к минимуму риск ошибок\n";
echo "    программирования;</font></li>\n";
echo "  <li><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">ускоряет\n";
echo "    цикл разработки — модульность и здесь\n";
echo "    играет важную роль, поскольку различные\n";
echo "    компоненты ОО-программ можно легко\n";
echo "    использовать в других программах, что\n";
echo "    уменьшает избыточность,кода и снижает\n";
echo "    риск внесения ошибок при копировании.</font></li>\n";
echo "</ul>\n";
echo "<p><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Специфика\n";
echo "ООП заметно повышает эффективность труда\n";
echo "программистов и позволяет им создавать\n";
echo "более мощные, масштабируемые и эффективные\n";
echo "приложения. Многие преимущества ООП\n";
echo "обусловлены одним из его фундаментальных\n";
echo "принципов — </font><i><font COLOR=\"#000000\">инкапсуляцией.\n";
echo "</font></i><font COLOR=\"#000000\">Инкапсуляцией называется\n";
echo "включение различных мелких элементов в\n";
echo "более крупный объект, в результате чего\n";
echo "программист работает непосредственно с\n";
echo "этим объектом. Это приводит к упрощению\n";
echo "программы, поскольку из нее исключаются\n";
echo "второстепенные детали.</font></font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Инкапсуляцию\n";
echo "можно сравнить с работой автомобиля с точки\n";
echo "зрения типичного водителя. Многие водители\n";
echo "не разбираются в подробностях внутреннего\n";
echo "устройства машины, но при этом управляют ею\n";
echo "именно так, как было задумано. Пусть они не\n";
echo "знают, как устроен двигатель, тормоз или\n";
echo "рулевое управление, — существует\n";
echo "специальный интерфейс, который\n";
echo "автоматизирует и упрощает эти сложные\n";
echo "операции. Сказанное также относится к\n";
echo "инкапсуляции и ООП — многие подробности «внутреннего\n";
echo "устройства» скрываются от пользователя,\n";
echo "что позволяет ему сосредоточиться на\n";
echo "решении конкретных задач. В ООП эта\n";
echo "возможность обеспечивается классами,\n";
echo "объектами и различными средствами\n";
echo "выражения иерархических связей между ними (классы\n";
echo "и объекты рассматриваются ниже).</font></p>\n";
echo "<b>\n";
echo "<p><A NAME=\"b\"></A><font color=\"#000000\" face=\"Times New Roman\" size=\"4\">РНР и ООП</font></p>\n";
echo "</b>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Хотя РНР\n";
echo "обладает общими объектно-ориентированными\n";
echo "возможностями, он не является полноценным\n";
echo "ОО-языком (например, таким, как C++ или Java). В\n";
echo "частности, в РНР не поддерживаются\n";
echo "следующие объектно-ориентированные\n";
echo "возможности:</font></p>\n";
echo "<ul>\n";
echo "  <li><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">множественное\n";
echo "    наследование;</font></li>\n";
echo "  <li><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">автоматический\n";
echo "    вызов конструкторов (если вы хотите,\n";
echo "    чтобы при конструировании объекта\n";
echo "    производного класса вызывался\n";
echo "    конструктор базового класса, вам\n";
echo "    придется вызвать его явно);</font></li>\n";
echo "  <li><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">абстрактные\n";
echo "    классы;</font></li>\n";
echo "  <li><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">перегрузка\n";
echo "    методов;</font></li>\n";
echo "  <li><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">перегрузка\n";
echo "    операторов (это связано с тем, что РНР\n";
echo "    является языком со свободной типизацией,\n";
echo "    — за дополнительной информацией\n";
echo "    обращайтесь к главе 2);</font></li>\n";
echo "  <li><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">закрытый и\n";
echo "    открытый доступ, виртуальные функции;</font></li>\n";
echo "  <li><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">деструкторы;</font></li>\n";
echo "  <li><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">полиморфизм.</font></li>\n";
echo "</ul>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Но и без\n";
echo "всего перечисленного вы все равно сможете\n";
echo "извлечь пользу из объектно-ориентированных\n";
echo "возможностей, поддерживаемых РНР.\n";
echo "Реализация ООП в РНР оказывает\n";
echo "колоссальную помощь в модульном оформлении\n";
echo "функциональности вашей программы.</font></p>\n";
echo "<b>\n";
echo "<p><A NAME=\"c\"></A><font color=\"#000000\" face=\"Times New Roman\" size=\"4\">Классы,\n";
echo "объекты и объявления методов</font></p>\n";
echo "</b><i>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Классы </font></i><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">образуют\n";
echo "синтаксическую базу объектно-ориентированного\n";
echo "программирования. Их можно рассматривать\n";
echo "как своего рода «контейнеры» для логически\n";
echo "связанных данных и функций (обычно\n";
echo "называемых </font><i><font COLOR=\"#000000\">методами — </font></i><font COLOR=\"#000000\">см.\n";
echo "ниже). Класс представляет собой шаблон, по\n";
echo "которому создаются конкретные экземпляры,\n";
echo "используемые в программе. Экземпляры\n";
echo "классов называются </font></font><i><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">объектами.</font></p>\n";
echo "</i>\n";
echo "<p><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Чтобы\n";
echo "лучше понять связь между классами и\n";
echo "объектами, можно представить класс как «чертеж»\n";
echo "для создания объектов. По чертежу «изготавливаются»\n";
echo "разные объекты</font></font><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">,\n";
echo "обладающие одними и теми же базовыми\n";
echo "характеристиками (например, при\n";
echo "строительстве дома — одна дверь, два окна и\n";
echo "определенная толщина стены). Тем не менее,\n";
echo "каждый объект существует независимо от\n";
echo "других — изменение его характеристик никак\n";
echo "не влияет на характеристики других\n";
echo "объектов; например, в уже построенном доме\n";
echo "можно прорубить дополнительное окно. Важно\n";
echo "помнить, что у объектов все равно остается\n";
echo "общая характеристика — количество окон.</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Класс также\n";
echo "можно рассматривать как тип данных (см.\n";
echo "главу 2), а объект — как переменную (по\n";
echo "аналогии с тем, как переменная $counter\n";
echo "относится к целому, а переменная $last_name — к\n";
echo "строковому типу). Программа может\n";
echo "одновременно работать с несколькими\n";
echo "объектами одного класса как с несколькими\n";
echo "переменными целого типа. Общий формат\n";
echo "классов РНР приведен в листинге 6.1.</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\"><i><b>Листинг\n";
echo "6.1</b>. Объявление классов в РНР</i></font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">class Class_name {&nbsp;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\"> var\n";
echo "$attribute_1;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">...</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">var $attribute_N;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">function function1() {</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">...</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">}</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">...</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">function functionN() {</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">...</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">} // end Class_name</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Подведем\n";
echo "итоги: объявление класса должно начинаться\n";
echo "с ключевого слова class (подобно тому, как\n";
echo "объявление функции начинается с ключевого\n";
echo "слова function). Каждому объявлению атрибута,\n";
echo "содержащегося в классе, должно\n";
echo "предшествовать ключевое слово van. Атрибуты\n";
echo "могут относиться к любому типу данных,\n";
echo "поддерживаемых в РНР; их можно\n";
echo "рассматривать как переменные с небольшими\n";
echo "различиями, о которых вы узнаете в этой\n";
echo "главе. После объявлений атрибутов следуют\n";
echo "объявления методов, очень похожие на\n";
echo "типичные объявления функций.</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\"><i><img border=\"0\" src=\"Prim.gif\" align=left width=\"36\" height=\"35\">По\n";
echo "общепринятым правилам имена классов ООП\n";
echo "начинаются с прописной буквы, а все слова в\n";
echo "именах методов, кроме первого, начинаются с\n";
echo "прописных букв (первое слово начинается со\n";
echo "строчной буквы). Разумеется, вы можете\n";
echo "использовать любые обозначения, которые\n";
echo "сочтете удобными; главное — выберите\n";
echo "стандарт и придерживайтесь его.</i></font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Методы часто\n";
echo "используются для работы с атрибутами\n";
echo "классов. При ссылках на атрибуты внутри\n";
echo "методов используется специальная\n";
echo "переменная $this. Синтаксис методов\n";
echo "продемонстрирован в следующем примере:</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;?</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">class Webpage {</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">van $bgcolor;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">function setBgColor($color)\n";
echo "{</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$this-&gt;bgcolor = $color;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">}</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">function getBgColor() {</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">return $this-&gt;bgcolor;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">}</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">}</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">?&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Переменная\n";
echo "$this ссылается на экземпляр объекта, для\n";
echo "которого вызывается метод. Поскольку в\n";
echo "любом классе может существовать несколько\n";
echo "экземпляров объектов, уточнение $this\n";
echo "необходимо для ссылок на атрибуты,\n";
echo "принадлежащие текущему объекту. При\n";
echo "использовании этого синтаксиса обратите\n";
echo "внимание на два обстоятельства:</font></p>\n";
echo "<p><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">атрибут,\n";
echo "на который вы ссылаетесь в методе, </font><i><font COLOR=\"#000000\">не\n";
echo "нужно </font></i><font COLOR=\"#000000\">передавать в виде\n";
echo "параметра функции;</font></font></p>\n";
echo "<p><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">знак\n";
echo "доллара ($) ставится перед переменной $this, но </font><i><font COLOR=\"#000000\">не\n";
echo "</font></i><font COLOR=\"#000000\">перед именем атрибута (как\n";
echo "у обычной переменной).</font></font></p>\n";
echo "<p><A NAME=\"d\"></A><font color=\"#000000\" face=\"Times New Roman\" size=\"4\">Создание\n";
echo "объектов и работа с ними</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Объекты\n";
echo "создаются оператором new. Например, объект\n";
echo "класса Webpage создается следующей командой:</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$home_page = new Webpage;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Новый объект\n";
echo "с именем $some_page обладает собственным\n";
echo "набором атрибутов и методов, перечисленных\n";
echo "в классе Webpage. Для изменения значения\n";
echo "атрибута $bgcolor, принадлежащего этому\n";
echo "конкретному объекту, можно воспользоваться\n";
echo "определенным в классе методом setBgColor( ):</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$some_page-&gt;setBgColor(&quot;black&quot;);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Следует\n";
echo "помнить, что РНР также позволяет явно\n";
echo "получить значение атрибута указанием имен\n";
echo "объекта и атрибута:</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$some_page-&gt;bgcolor;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Однако\n";
echo "второй способ противоречит принципу\n";
echo "инкапсуляции, и при работе с ООП поступать\n";
echo "так не следует. Чтобы понять, почему это так,\n";
echo "прочитайте следующий раздел.</font></p>\n";
echo "<p><A NAME=\"e\"></A><font color=\"#000000\" face=\"Times New Roman\" size=\"4\">Нарушение\n";
echo "инкапсуляции</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Допустим, вы\n";
echo "создали класс, один из атрибутов которого\n";
echo "представляет собой массив. Но вместо того\n";
echo "чтобы работать с массивом через\n";
echo "промежуточные методы (например,\n";
echo "предназначенные для создания, удаления,\n";
echo "модификации элементов и т. д.), вы в случае\n";
echo "необходимости напрямую обращаетесь к\n";
echo "массиву. В течение месяца вы уверенно\n";
echo "программируете большое «объектно-ориентированное»\n";
echo "приложение и благосклонно принимаете хвалу\n";
echo "коллег-программистов. Будущее сулит много\n";
echo "радостей — премии, оплачиваемый отпуск и\n";
echo "даже отдельный кабинет.</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Но вот через\n";
echo "месяц после успешного запуска вашего web-приложения\n";
echo "ваш начальник вдруг решает, что массивы в\n";
echo "данном случае не годятся и работать с\n";
echo "информацией нужно только через базу данных.</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Какая\n";
echo "неприятность! Поскольку вы решили работать\n";
echo "с атрибутами напрямую, вам теперь придется\n";
echo "просматривать всю программу и везде, где\n";
echo "происходят обращения к данным, вносить\n";
echo "исправления в соответствии с новым\n";
echo "интерфейсом. Задача весьма хлопотная, к\n";
echo "тому же чревата риском внесения новых\n";
echo "ошибок.</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">А теперь\n";
echo "давайте посмотрим, что произошло бы при\n";
echo "работе с данными с использованием методов.\n";
echo "Все, что вам пришлось бы сделать при\n";
echo "переходе от массива к базе данных —\n";
echo "перепрограммировать методы. Модификация\n";
echo "автоматически распространяется на все\n";
echo "точки программы, в которых присутствуют\n";
echo "вызовы методов.</font></p>\n";
echo "<p><A NAME=\"f\"></A><font color=\"#000000\" face=\"Times New Roman\" size=\"4\">Конструкторы</font></p>\n";
echo "<p><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Довольно\n";
echo "часто при создании объекта требуется\n";
echo "задать значения некоторых атрибутов. К\n";
echo "счастью, разработчики технологии ООП учли\n";
echo "это обстоятельство и реализовали его в\n";
echo "концепции </font><i><font COLOR=\"#000000\">конструкторов. </font></i><font COLOR=\"#000000\">Конструктор\n";
echo "представляет собой метод, который задает\n";
echo "значения некоторых атрибутов (а также может\n";
echo "вызывать другие методы). Конструкторы\n";
echo "вызываются автоматически при создании\n";
echo "новых объектов. Чтобы это стало возможным,\n";
echo "имя метода-конструктора должно совпадать с\n";
echo "именем класса, в котором он содержится.\n";
echo "Пример конструктора приведен в листинге 6.2.</font></font></p>\n";
echo "<b><i>\n";
echo "<p><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Листинг\n";
echo "6.2. </font></font></i></b><i><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Использование\n";
echo "конструктора</font></font></p>\n";
echo "</i>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;?</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">class Webpage {&nbsp;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\"> var\n";
echo "$bgcolor;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">function Webpage($color)\n";
echo "{</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$this-&gt;bgcolor = $color;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">}</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">}</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">// Вызвать\n";
echo "конструктор класса Webpage</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$page = new Webpage(&quot;brown&quot;);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">?&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Раньше\n";
echo "создание объекта и инициализация атрибутов\n";
echo "выполнялись раздельно. Конструкторы\n";
echo "позволяют выполнить эти действия за один\n";
echo "этап.</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Интересная\n";
echo "подробность: в зависимости от количества\n";
echo "передаваемых параметров могут вызываться\n";
echo "разные конструкторы. Например, в листинге 6.2\n";
echo "объекты класса Webpage могут создаваться двумя\n";
echo "способами. Во-первых, вы можете вызвать\n";
echo "конструктор, который просто создает объект,\n";
echo "но не инициализирует его атрибуты:</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$page = new Webpage;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Во-вторых,\n";
echo "объект можно создать при помощи\n";
echo "конструктора, определенного в классе, — в\n";
echo "этом случае вы создаете объект класса Webpage и\n";
echo "присваиваете значение его атрибуту bgcolor:</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$page = new Webpage(&quot;brown&quot;);</font></p>\n";
echo "<p><A NAME=\"g\"></A><font color=\"#000000\" face=\"Times New Roman\" size=\"4\">Деструкторы</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Как\n";
echo "упоминалось ранее, в РНР отсутствует\n";
echo "непосредственная поддержка деструкторов.\n";
echo "Тем не менее, вы можете легко имитировать\n";
echo "работу деструктора, вызывая функцию РНР unset(\n";
echo "). Эта функция уничтожает содержимое\n";
echo "переменной и возвращает занимаемые ею\n";
echo "ресурсы системе. С объектами unset( ) работает\n";
echo "так же, как и с переменными. Допустим, вы\n";
echo "работаете с объектом $Webpage. После завершения\n";
echo "работы с этим конкретным объектом\n";
echo "вызывается функция</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">unset($Webpage);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Эта команда\n";
echo "удаляет из памяти все содержимое $Webpage.\n";
echo "Действуя в духе инкапсуляции, можно\n";
echo "поместить вызов unset( ) в метод с именем destroy( ) и\n";
echo "затем вызвать его:</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$Website-&gt;destroy( );</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Помните:\n";
echo "необходимость в вызове деструкторов\n";
echo "возникает лишь при работе с объектами,\n";
echo "использующими большой объем ресурсов,\n";
echo "поскольку все переменные и объекты\n";
echo "автоматически уничтожаются по завершении\n";
echo "сценария.</font></p>\n";
echo "<p><A NAME=\"h\"></A><font color=\"#000000\" face=\"Times New Roman\" size=\"4\">Простое и\n";
echo "иерархическое наследование</font></p>\n";
echo "<p><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Как\n";
echo "говорилось выше, класс является шаблоном,\n";
echo "по которому создаются реальные объекты с\n";
echo "определенными характеристиками и\n";
echo "функциями. Нетрудно представить себе\n";
echo "ситуацию, при которой такой объект является\n";
echo "частью другого объекта. Например,\n";
echo "автомобиль можно считать частным случаем\n";
echo "категории «транспортное средство», к\n";
echo "которой относятся и самолеты. Хотя разные\n";
echo "типы транспортных средств сильно\n";
echo "отличаются друг от друга, все они\n";
echo "характеризуются атрибутами из общего\n";
echo "набора (количество колес, мощность,\n";
echo "максимальная скорость, модель и т. д.). Пусть\n";
echo "конкретные значения этих атрибутов сильно\n";
echo "различаются — атрибуты все равно присущи\n";
echo "всем транспортным средствам. Таким образом,\n";
echo "</font><i><font COLOR=\"#000000\">субклассы </font></i><font COLOR=\"#000000\">«автомобиль»\n";
echo "и «самолет» наследуют общий набор базовых\n";
echo "характеристик от <i>суперкласса</i></font><i><font COLOR=\"#000000\">\n";
echo "</font></i><font COLOR=\"#000000\">«транспортное средство».\n";
echo "Концепция получения классом характеристик\n";
echo "от другого, более общего класса называется </font></font><i><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">наследованием.</font></p>\n";
echo "</i>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Наследование\n";
echo "является исключительно полезным средством\n";
echo "программирования, поскольку его применение\n";
echo "предотвращает копирование кода, совместно\n";
echo "используемого структурами данных, —\n";
echo "например, общих характеристик различных\n";
echo "типов транспортных средств, упоминавшихся\n";
echo "в предыдущем абзаце. В общем случае\n";
echo "синтаксис наследования характеристик\n";
echo "другого класса в РНР выглядит так:</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">class Class_name2\n";
echo "extends Class_name1 {</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">объявления\n";
echo "атрибутов;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">объявления\n";
echo "методов;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">}</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Ключевое\n";
echo "слово extends говорит о том, что класс Class_name2\n";
echo "наследует все характеристики класса Class_name1.</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Помимо\n";
echo "возможности многократного использования\n";
echo "кода, наследование обладает еще одним\n";
echo "важным преимуществом — снижается\n";
echo "вероятность ошибок при</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">модификации\n";
echo "программы. Например, в иерархии,\n";
echo "изображенной на рис. 6.1, изменения в классе «автомобиль»\n";
echo "никак не отразятся на коде (и данных) класса\n";
echo "«самолет», и наоборот.</font></p>\n";
echo "<p><img border=\"0\" src=\"Prim.gif\" align=left width=\"36\" height=\"35\"><i><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Вызов\n";
echo "конструктора производного класса не\n";
echo "приводит к автоматическому вызову конструктора\n";
echo "базового класса.</font>\n";
echo "</i>\n";
echo "</p>\n";
echo "<p><i><img border=\"0\" src=\"6.1.jpg\" width=\"372\" height=\"133\"></p>\n";
echo "<b>\n";
echo "<p><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Рис. 6.1. </font></font></b><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Иерархия\n";
echo "транспортных средств</font></font></p>\n";
echo "</i>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">В листинге 6.3\n";
echo "приведены классы, моделирующие иерархию,\n";
echo "изображенную на рис. 6.1.</font></p>\n";
echo "<b><i>\n";
echo "<p><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Листинг\n";
echo "6.3. </font></font></i></b><i><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Представление\n";
echo "различных типов транспортных средств при\n";
echo "помощи наследования</font></font></p>\n";
echo "</i>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;?</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">//\n";
echo "Транспортное средство&nbsp;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\"> class Vehicle {</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">var $model;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">var $current_speed;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">function setSpeed($mph)\n";
echo "{</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$this-&gt;current_speed\n";
echo "= $mph;</font></p>\n";
echo "<p><font color=\"#000000\" size=\"3\" face=\"Courier New\">}</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">function getSpeed() {</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">return $this-&gt;current_speed;</font></p>\n";
echo "<p><font color=\"#000000\" size=\"3\" face=\"Courier New\">}</font></p>\n";
echo "<p><font color=\"#000000\" size=\"3\" face=\"Courier New\">}</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">// Автомобиль</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">class Auto extends\n";
echo "Vehicle {&nbsp;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\"> var $fue1_type;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">function setFuelType($fuel)\n";
echo "{</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$this-&gt;fuel_type = $fuel;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">}</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">function getFuelType()\n";
echo "{</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">return $this-&gt;fuel_type;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">}</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">}</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">// Самолет</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">class Airplane extends\n";
echo "Vehicle {</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">var $wingspan;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">function setWingSpan($wingspan)\n";
echo "{</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$this-&gt;wingspan = $wingspan;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">}</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">function getWingSpan()\n";
echo "{</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">return $this-&gt;wingspan;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">}</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">}</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">?&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Объекты этих\n";
echo "классов создаются следующим образом:</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$tractor = new Vehicle;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$gulfstream = new Airplane;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Приведенные\n";
echo "команды создают два объекта. Первый объект,\n";
echo "$tractor, относится к классу Vehicle. Второй объект,\n";
echo "$gulfstream, относится к классу Airplane и потому\n";
echo "обладает как общими характеристиками\n";
echo "класса Vehicle, так и уточненными\n";
echo "характеристиками класса Airplаne.</font></p>\n";
echo "<p><img border=\"0\" src=\"Prim.gif\" align=left width=\"36\" height=\"35\"><i><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Ситуация,\n";
echo "при которой класс наследует свойства\n";
echo "нескольких родительских классов,\n";
echo "называется множественным наследованием. К\n";
echo "сожалению, в РНР множественное\n";
echo "наследование не поддерживается. Например,\n";
echo "следующая конструкция невозможна в РНР:</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">class Airplane extends\n";
echo "Vehicle extends Building...</font></p>\n";
echo "</i><b>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Многоуровневое\n";
echo "наследование</font></p>\n";
echo "</b>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">С\n";
echo "увеличением размеров и сложности программ\n";
echo "может возникнуть необходимость в\n";
echo "многоуровневом наследовании. Иначе говоря,\n";
echo "класс будет наследовать свои свойства от\n";
echo "других классов, которые, в свою очередь,\n";
echo "будут наследовать от третьих классов и т. д.\n";
echo "Многоуровневое наследование развивает\n";
echo "модульную структуру программы, обеспечивая\n";
echo "простоту сопровождения и более четкую\n";
echo "логическую структуру. Скажем, при\n";
echo "использовании примера с транспортными\n";
echo "средствами в большой программе может\n";
echo "появиться необходимость в дополнительном\n";
echo "разбиении на субклассы суперкласса Vehicle,\n";
echo "продолжающем логическое развитие иерархии.\n";
echo "Например, транспортные средства можно\n";
echo "дополнительно разделить на наземные,\n";
echo "морские и воздушные, чтобы суперкласс\n";
echo "специализированных субклассов выбирался в\n";
echo "зависимости от среды, в которой\n";
echo "перемещается данное транспортное средство.\n";
echo "Новый вариант иерархии показан на рис. 6.2.</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Краткий\n";
echo "пример, приведенный в листинге 6.4,\n";
echo "подчеркивает некоторые важные аспекты\n";
echo "многоуровневого наследования в РНР.</font></p>\n";
echo "<b>\n";
echo "<p><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\"><i>Листинг\n";
echo "6.4. </i> </font></font></b><i><font COLOR=\"#000000\">Многоуровневое\n";
echo "наследование</font></i></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;?</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">class Vehicle {</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">Объявления\n";
echo "атрибутов...</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">Объявления\n";
echo "методов...</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">}</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">class Land extends\n";
echo "Vehicle {</font></p>\n";
echo "<p><font color=\"#000000\" size=\"3\" face=\"Courier New\">&nbsp; Объявления атрибутов...</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&nbsp; Объявления\n";
echo "методов...</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">}</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">class Саr extends\n";
echo "Land {</font></p>\n";
echo "<p><font color=\"#000000\" size=\"3\" face=\"Courier New\">&nbsp; Объявления атрибутов...</font></p>\n";
echo "<p><font color=\"#000000\" size=\"3\" face=\"Courier New\">&nbsp; Объявления\n";
echo "методов...</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">}</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$nissan = new Car;</font></p>\n";
echo "<p><font color=\"#000000\" size=\"3\" face=\"Courier New\">?&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Объект $nissan\n";
echo "содержит все атрибуты и методы классов Саr,\n";
echo "Land и Vehicle. Как видите, программа получается\n";
echo "исключительно модульной. Допустим, когда-то\n";
echo "в будущем вы захотите добавить в класс Land\n";
echo "новый атрибут. Нет проблем: внесите\n";
echo "соответствующие изменения в класс Land, и\n";
echo "этот атрибут немедленно становится\n";
echo "доступным для классов Land и Саr, не влияя на\n";
echo "функциональность других классов. Таким\n";
echo "образом, модульность кода и гибкость\n";
echo "относятся к числу основных преимуществ ООП.</font></p>\n";
echo "<p><font size=\"3\" face=\"Times New Roman\">&nbsp;<img border=\"0\" src=\"6.2.jpg\" width=\"500\" height=\"284\"></font></p>\n";
echo "<b><i>\n";
echo "<p><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Рис. 6.2. </font></font></i></b><i><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Многоуровневое\n";
echo "наследование в иерархии Vehicle</font></font></p>\n";
echo "</i>\n";
echo "<p><i><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\"><img border=\"0\" src=\"Prim.gif\" align=left width=\"36\" height=\"35\">Хотя\n";
echo "масс наследует свои характеристики от\n";
echo "цепочки родителей, конструкторы родительских\n";
echo "классов не вызываются автоматически при\n";
echo "создании объектов класса-наследника. Эти\n";
echo "конструкторы могут вызываться классом-наследником\n";
echo "в виде методов.</font></p>\n";
echo "</i>\n";
echo "<p><A NAME=\"i\"></A><font color=\"#000000\" face=\"Times New Roman\" size=\"4\">Абстрактные\n";
echo "классы</font></p>\n";
echo "<p><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">В\n";
echo "некоторых ситуациях бывает удобно создать\n";
echo "класс, объекты которого никогда не\n";
echo "создаются (данный класс нужен всего лишь\n";
echo "как базовый для создания производных\n";
echo "классов). Такие классы называются </font><i><font COLOR=\"#000000\">абстрактными.\n";
echo "</font></i><font COLOR=\"#000000\">Абстрактные классы</font></font>\n";
echo "<font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">обычно\n";
echo "применяются в тех случаях, когда\n";
echo "разработчик программы хочет обеспечить\n";
echo "обязательную поддержку некоторых\n";
echo "функциональных возможностей всеми\n";
echo "классами, производными от абстрактного\n";
echo "базового класса.</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">В РНР\n";
echo "отсутствует прямая поддержка абстрактных\n";
echo "классов, однако существует простое\n";
echo "обходное решение — достаточно определить в\n";
echo "«абстрактном» классе конструктор и\n";
echo "включить в него вызов die( ). Вернемся к\n";
echo "классам из листинга 6.4. Скорее всего, вам\n";
echo "никогда не придется создавать экземпляры\n";
echo "классов Land и Vehicle, поскольку они не могут\n";
echo "представлять физические объекты. Для\n";
echo "представления реальных объектов (например,\n";
echo "автомобилей) следует создать класс,\n";
echo "производный от этих классов. Следовательно,\n";
echo "чтобы предотвратить возможное создание\n";
echo "объектов классов Land и Vehicle, необходимо\n";
echo "включить в их конструкторы вызовы die( ), как\n";
echo "показано в листинге 6.5.</font></p>\n";
echo "<b><i>\n";
echo "<p><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Листинг\n";
echo "6.5. </font></font></i></b><i><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Создание\n";
echo "абстрактных классов</font></font></p>\n";
echo "</i>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;?</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">class Vehicle {</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">Объявления\n";
echo "атрибутов...</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">function Vehicle() }</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">die (&quot;Cannot\n";
echo "create Abstract Vehicle class!&quot;);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">}</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">Объявления\n";
echo "других методов...</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">}</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">class Land extends\n";
echo "Vehicle {</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">Объявления\n";
echo "атрибутов...</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">function Land() }</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">die (&quot;Cannot\n";
echo "create Abstract Land class!&quot;);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">}</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">Объявления\n";
echo "других методов. } class Car extends Land {</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">Объявления\n";
echo "атрибутов...</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">Объявления\n";
echo "методов...</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">}</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">?&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Попытка\n";
echo "создания экземпляра этих абстрактных\n";
echo "классов приведет к выдаче сообщения об\n";
echo "ошибке и завершению программы.</font></p>\n";
echo "<p><A NAME=\"j\"></A><font color=\"#000000\" face=\"Times New Roman\" size=\"4\">Перегрузка\n";
echo "методов</font></p>\n";
echo "<i>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Перегрузкой\n";
echo "методов </font></i><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">называется\n";
echo "определение нескольких методов с\n";
echo "одинаковыми именами, но разным количеством\n";
echo "или типом параметров. Как и в случае с\n";
echo "абстрактными классами, в РНР эта\n";
echo "возможность не поддерживается, но\n";
echo "существует простое обходное решение,\n";
echo "приведенное в листинге 6.6.</font></p>\n";
echo "<b><i>\n";
echo "<p><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Листинг\n";
echo "6.6. </font></font></i></b><i><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Перегрузка\n";
echo "методов</font></font></p>\n";
echo "</i>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;?</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">class Page {</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">var $bgcolor;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">var $textcolor;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&nbsp;function Page() {</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">// Определить\n";
echo "количество переданных аргументов</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">// и вызвать\n";
echo "метод с нужным именем</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$name = &quot;Page&quot;.func_num_args();</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">// Call $name with\n";
echo "correct number of arguments passed in</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">if ( func_num_args() ==\n";
echo "0 ) :</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$this-&gt;$name();</font></p>\n";
echo "<p><font color=\"#000000\" size=\"3\" face=\"Courier New\">else\n";
echo ":</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$this-&gt;$name(func_get_arg(0));</font></p>\n";
echo "<p><font color=\"#000000\" size=\"3\" face=\"Courier New\">endif;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">}</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">function Page0() {</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$this-&gt;bgcolor =\n";
echo "&quot;white&quot;;</font></p>\n";
echo "<p><font color=\"#000000\" size=\"3\" face=\"Courier New\">$this-&gt;textcolor = &quot;black&quot;;</font></p>\n";
echo "<p><font color=\"#000000\" size=\"3\" face=\"Courier New\">print &quot;Created\n";
echo "default page&quot;;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">}</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">function Page1($bgcolor)\n";
echo "{</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$this-&gt;bgcolor =\n";
echo "$bgcolor;</font></p>\n";
echo "<p><font color=\"#000000\" size=\"3\" face=\"Courier New\">$this-&gt;textcolor = &quot;black&quot;;</font></p>\n";
echo "<p><font color=\"#000000\" size=\"3\" face=\"Courier New\">print &quot;Created custom\n";
echo "page&quot;;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">}</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">}</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$html_page - new Page(&quot;red&quot;);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">?&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">В этом\n";
echo "примере при создании нового объекта с\n";
echo "именем $html_page передается один аргумент.\n";
echo "Поскольку в классе был определен\n";
echo "конструктор по умолчанию (Раgе( )),\n";
echo "вызывается именно он. Однако конструктор по\n";
echo "умолчанию всего лишь выбирает, какому из\n";
echo "конструкторов (Page0( ) или Page1( )) следует\n";
echo "передать управление. При выборе\n";
echo "конструктора используются функции func_num_args(\n";
echo ")\n";
echo "и func_get_arg( ), которые, соответственно,\n";
echo "определяют количество аргументов и читают\n";
echo "эти аргументы.</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Конечно,\n";
echo "такое решение вряд ли можно назвать\n";
echo "полноценной перегрузкой, но оно подойдет\n";
echo "для тех, кто не может жить без этого важного\n";
echo "аспекта ООП.</font></p>\n";
echo "<b>\n";
echo "<p><A NAME=\"k\"></A><font color=\"#000000\" face=\"Times New Roman\" size=\"4\">Функции для\n";
echo "работы с классами и объектами</font></p>\n";
echo "</b>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">В РНР\n";
echo "существует несколько стандартных функций\n";
echo "для работы с классами и объектами; эти\n";
echo "функции рассматриваются в следующих\n";
echo "разделах. Все они часто используются на\n";
echo "практике, особенно в процессе разработки\n";
echo "интерфейса, администрирования кода и\n";
echo "диагностики ошибок.</font></p>\n";
echo "<b>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">get_class_methods( )</font></p>\n";
echo "</b>\n";
echo "<p><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Функция\n";
echo "get_class_methods( ) возвращает массив имен методов\n";
echo "класса с заданным именем. Синтаксис функции\n";
echo "get_class_methods( ):</font></font></p>\n";
echo "<p><font face=\"Courier New\"><font COLOR=\"#000000\" size=\"3\">array get_class_methods\n";
echo "(string </font> </font><font COLOR=\"#000000\">имя_класса)</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Простой\n";
echo "пример использования get_class_methods( ) приведен в\n";
echo "листинге 6.7.</font></p>\n";
echo "<b><i>\n";
echo "<p><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Листинг\n";
echo "6.7. </font></font></i></b><i><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Получение\n";
echo "списка методов класса</font></font></p>\n";
echo "</i>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;?</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">...</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">class Airplane extends\n";
echo "Vehicle {&nbsp;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\"> var $wingspan;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">function setWingSpan($wingspan)\n";
echo "{&nbsp;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\"> $this-&gt;wingspan = $wingspan;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">}</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">function getWingSpan()\n";
echo "{&nbsp;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\"> return $this-&gt;wingspan;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">}</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">}</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$cls_methods =\n";
echo "get_class_methods(Airplane);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">// Массив\n";
echo "$cls_methods содержит имена всех методов,</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">//\n";
echo "объявленных в классах &quot;Airplane&quot; и &quot;Vehicle&quot;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">?&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Как видно из\n";
echo "листинга 6.7, функция get_class_methods( ) позволяет\n";
echo "легко получить информацию обо всех методах,\n";
echo "поддерживаемых классом.</font></p>\n";
echo "<b>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">get_class_vars( )</font></p>\n";
echo "</b>\n";
echo "<p><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Функция\n";
echo "get_class_vars( ) возвращает массив имен атрибутов\n";
echo "класса с заданным именем. Синтаксис функции\n";
echo "get_class_vars( ):</font></font></p>\n";
echo "<p><font face=\"Courier New\"><font COLOR=\"#000000\" size=\"3\">array get_class_vars\n";
echo "(string </font> </font><font COLOR=\"#000000\">имя_класса)</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Пример\n";
echo "использования get_class_vars( ) приведен в листинге\n";
echo "6.8.</font></p>\n";
echo "<b><i>\n";
echo "<p><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Листинг\n";
echo "6.8. </font></font></i></b><i><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Получение\n";
echo "списка атрибутов класса функцией get_class_vars( )</font></font></p>\n";
echo "</i>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;?</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">class Vehicle {</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">var $model;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">var $current_speed; }</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">class Airplane extends\n";
echo "Vehicle {</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">var Swingspan; }\n";
echo "$a_class = &quot;Airplane&quot;;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$attribs = get_class_vars($a_class);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">// $attribs = array (\n";
echo "&quot;wingspan&quot;, &quot;model&quot;, &quot;current_speed&quot;)</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">?&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Массив $attribs\n";
echo "заполняется именами всех атрибутов класса\n";
echo "Airplane.</font></p>\n";
echo "<b>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">get_object_vars( )</font></p>\n";
echo "</b>\n";
echo "<p><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Функция\n";
echo "get_object_vars( ) возвращает ассоциативный массив\n";
echo "с информацией обо всех атрибутах объекта с\n";
echo "заданным именем. Синтаксис функции get_object_vars(\n";
echo "):</font></font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">array get_object_vars (object\n";
echo "имя_обьекта)</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Пример\n";
echo "использования функции get_object_vars( ) приведен в\n";
echo "листинге 6.9.</font></p>\n";
echo "<b><i>\n";
echo "<p><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Листинг\n";
echo "6.9. </font></font></i></b><font size=\"3\" face=\"Times New Roman\"><i><font COLOR=\"#000000\">Получение\n";
echo "информации о переменных объекта&nbsp; </font></i></font></p>\n";
echo "<p><font COLOR=\"#000000\" face=\"Courier New\" size=\"3\">&lt;?</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">class Vehicle {</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">var Swheels;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">}</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">class Land extends\n";
echo "Vehicle {</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">var Sengine;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">}</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">class car extends Land\n";
echo "{</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">var $doors:</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">function car($doors,\n";
echo "$eng, $wheels) {</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$this-&gt;doors = $doors;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$this-&gt;engine = $eng;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$this-&gt;wheels\n";
echo "= $wheels;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">}</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">function get_wheels() {</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">return $this-&gt;wheels;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">}</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">}</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$toyota = new car(2,400,4);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$vars = get_object_vars($toyota);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">while (list($key, $value) =\n";
echo "each($vars)) :</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">print &quot;$key ==&gt; $value &lt;br&gt;&quot;;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">endwhile;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">// Выходные\n";
echo "данные:</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">// doors ==&gt; 2</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">// engine ==&gt; 400</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">// wheels ==&gt; 2</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">?&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Функция\n";
echo "get_object_vars( ) позволяет быстро получить всю\n";
echo "информацию об атрибутах конкретного\n";
echo "объекта и их значениях в виде\n";
echo "ассоциативного массива.</font></p>\n";
echo "<b>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">method_exists( )</font></p>\n";
echo "</b>\n";
echo "<p><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Функция\n";
echo "method_exists( ) проверяет, поддерживается ли\n";
echo "объектом метод с заданным именем. Если\n";
echo "метод поддерживается, функция возвращает\n";
echo "TRUE, в противном случае возвращается FALSE.\n";
echo "Синтаксис функции method_exists( ):</font></font></p>\n";
echo "<p><font face=\"Courier New\"><font COLOR=\"#000000\" size=\"3\">bool method_exi sts (object </font> </font><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">имя_обьекта.\n";
echo "string имя_метода)</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Пример\n";
echo "использования метода method_exists( ) приведён в\n";
echo "листинге 6.10.</font></p>\n";
echo "<b><i>\n";
echo "<p><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Листинг\n";
echo "6.10. </font></font></i></b><i><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Проверка\n";
echo "поддержки метода объектом при помощи\n";
echo "функции method_exists()</font></font></p>\n";
echo "</i>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;?</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">class Vehicle {</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">...</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">}</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">class Land extends\n";
echo "Vehicle {</font></p>\n";
echo "<p><font color=\"#000000\" size=\"3\" face=\"Courier New\">var $fourWheel;</font></p>\n";
echo "<p><font color=\"#000000\" size=\"3\" face=\"Courier New\">function setFourWheel Drive() {</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$this-&gt;fourWeel = 1;</font></p>\n";
echo "<p><font color=\"#000000\" size=\"3\" face=\"Courier New\">}</font></p>\n";
echo "<p><font color=\"#000000\" size=\"3\" face=\"Courier New\">}</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">// Создать\n";
echo "объект с именем $саr</font></p>\n";
echo "<p><font color=\"#000000\" size=\"3\" face=\"Courier New\">$car = new Land;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">// Если метод\n";
echo "&quot;fourWheelDrive&quot; поддерживается классом &quot;Land&quot;</font></p>\n";
echo "<p><font color=\"#000000\" size=\"3\" face=\"Courier New\">// или &quot;Vehicle&quot;, вызов method_exists возвращает\n";
echo "TRUE;</font></p>\n";
echo "<p><font color=\"#000000\" size=\"3\" face=\"Courier New\">// в противном случае возвращается\n";
echo "FALSE.</font></p>\n";
echo "<p><font color=\"#000000\" size=\"3\" face=\"Courier New\">//\n";
echo "В данном примере method_exists() возвращает TRUE.</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">if (method_exists($car,\n";
echo "&quot;setfourWheelDrive&quot;)) :</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">print &quot;This car is\n";
echo "equipped with 4-wheel drive&quot;;</font></p>\n";
echo "<p><font color=\"#000000\" size=\"3\" face=\"Courier New\">else :</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">print &quot;This car is\n";
echo "not equipped with 4-wheel drive&quot;;</font></p>\n";
echo "<p><font color=\"#000000\" size=\"3\" face=\"Courier New\">endif;</font></p>\n";
echo "<p><font color=\"#000000\" size=\"3\" face=\"Courier New\">?&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">В листинге\n";
echo "6.10 функция method_exists ( ) проверяет,\n";
echo "поддерживается ли объектом $car метод с\n";
echo "именем setFourWheelDrive( ). Если метод\n";
echo "поддерживается, функция возвращает\n";
echo "логическую истину и фрагмент выводит\n";
echo "соответствующее сообщение. В противном\n";
echo "случае возвращается FALSE и выводится другое\n";
echo "сообщение.</font></p>\n";
echo "<b>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">get_class( )</font></p>\n";
echo "</b>\n";
echo "<p><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Функция\n";
echo "get_class( ) возвращает имя класса, к которому\n";
echo "относится объект с заданным именем.\n";
echo "Синтаксис функции get_class( ): </font></font></p>\n";
echo "<p><font face=\"Courier New\"><font COLOR=\"#000000\" size=\"3\">string get_class(object </font></font><font size=\"3\" face=\"Courier New\"><font COLOR=\"#000000\">имя_объекта);</font></font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Пример\n";
echo "использования get_class( ) приведен в листинге\n";
echo "6.11.</font></p>\n";
echo "<b><i>\n";
echo "<p><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Листинг\n";
echo "6.11.</font></font></i></b><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\"><i>\n";
echo "</i></font><i><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Получение\n";
echo "имени класса функцией get_class( )</font></font></p>\n";
echo "</i>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;?</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">class Vehicle {</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">...</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">class Land extends\n";
echo "Vehicle {</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">...</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">}</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">// Создать\n";
echo "объект с именем $саr $car = new Land;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">// Переменной\n";
echo "$class_a присваивается строка &quot;Land&quot;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$class_a = get_class($car);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">?&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">В результате\n";
echo "переменной $class_a присваивается имя класса,\n";
echo "на основе которого был создан объект $саr.</font></p>\n";
echo "<b>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">get_parent_class( )</font></p>\n";
echo "</b>\n";
echo "<p><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Функция\n";
echo "get_parent_class( ) возвращает имя родительского\n";
echo "класса (если он есть) для объекта с заданным\n";
echo "именем. Синтаксис функции get_parent_dass( ):</font></font></p>\n";
echo "<p><font face=\"Courier New\"><font COLOR=\"#000000\" size=\"3\">string get_parent_class\n";
echo "(object </font></font><font size=\"3\" face=\"Courier New\"><font COLOR=\"#000000\">имя_обьекта);</font></font></p>\n";
echo "<p><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Листинг\n";
echo "6.12 демонстрирует использование get_parent_class( ).</font></font></p>\n";
echo "<p><font size=\"3\" face=\"Times New Roman\"><b><i><font COLOR=\"#000000\">Листинг\n";
echo "6.12. </font></i></b></font><i><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Получение\n";
echo "имени родительского класса функцией\n";
echo "get_parent_class( )</font></font></p>\n";
echo "</i>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;?</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">class Vehicle {</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">...</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">}</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">class Land extends\n";
echo "Vehicle {</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">...</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">}</font></p>\n";
echo "<p><font size=\"3\" face=\"Courier New\"><font COLOR=\"#000000\">// Создать\n";
echo "объект </font><i><font COLOR=\"#000000\">с </font></i><font COLOR=\"#000000\">именем\n";
echo "$саr $саr = new Land;</font></font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">// Переменной\n";
echo "$parent присваивается строка &quot;Vehicle&quot;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$parent = get_parent_dass($car);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">?&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Как и\n";
echo "следовало ожидать, при вызове get_parent_class( )\n";
echo "переменной $parent будет присвоена строка &quot;Vehicle&quot;.</font></p>\n";
echo "<b>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">is_subclass_of( )</font></p>\n";
echo "</b>\n";
echo "<p><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Функция\n";
echo "is_subclass_of( ) проверяет, был ли объект создан на\n";
echo "базе класса, имеющего родительский класс с\n";
echo "заданным именем. Функция возвращает TRUE,\n";
echo "если проверка дает положительный результат,\n";
echo "и FALSE в противном случае. Синтаксис функции\n";
echo "is_subclass_of( ):</font></font></p>\n";
echo "<p><font face=\"Courier New\"><font COLOR=\"#000000\" size=\"3\">bool is_subclass_of (object </font> </font><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">объект,\n";
echo "string имя_класса)</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Использование\n";
echo "is_subclass_of( ) продемонстрировано в листинге 6.13.</font></p>\n";
echo "<b><i>\n";
echo "<p><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Листинг\n";
echo "6.13.</font></font></i></b><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\"><i>\n";
echo "</i></font><i><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Использование\n";
echo "функции is_subdass_of( )</font></font></p>\n";
echo "</i>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;?</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">class Vehicle {</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">...</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">}</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">class Land extends\n";
echo "Vehicle {</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">...</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">}</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$auto = new Land;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">// Переменной\n";
echo "$is_subclass присваивается TRUE</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$is_subclass =\n";
echo "is_subclass_of($auto, &quot;Vehicle&quot;);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">?&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">В листинге\n";
echo "6.13 переменной $is_subclass( ) присваивается\n";
echo "признак того, принадлежит ли объект $auto к\n";
echo "субклассу родительского класса Vehicle. В\n";
echo "приведенном фрагменте $auto относится к\n";
echo "классу Vehicle; следовательно, переменной $is_subclass(\n";
echo ") будет присвоено значение TRUE.</font></p>\n";
echo "<b>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">get_declared_classes( )</font></p>\n";
echo "</b>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Функция\n";
echo "get_declared_classes( ) возвращает массив с именами\n";
echo "всех определенных классов (листинг 6.14).\n";
echo "Синтаксис функции get_declared_classes( ):</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">array get_declared_classes(\n";
echo ")</font></p>\n";
echo "<b><i>\n";
echo "<p><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Листинг\n";
echo "6.14. </font></font></i></b><i><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Получение\n";
echo "списка классов функцией get_declared_classes( )</font></font></p>\n";
echo "</i>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;?</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">class Vehicle {</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">...</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">}</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">class Land extends\n";
echo "Vehicle {</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">...</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">}</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$declared_classes =\n";
echo "get_declared_classes();</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">// $declared_classes = array(&quot;Vehicle&quot;, &quot;Land&quot;)</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">?&gt;</font></p>\n";
echo "<b>\n";
echo "<p><A NAME=\"l\"></A><font color=\"#000000\" face=\"Times New Roman\" size=\"4\">Итоги</font></p>\n";
echo "</b>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">В этой главе\n";
echo "были представлены некоторые концепции\n";
echo "объектно-ориентированного\n";
echo "программирования, при этом особое внимание\n";
echo "уделялось их реализации в языке РНР. В\n";
echo "частности, были рассмотрены следующие темы:</font></p>\n";
echo "<ul>\n";
echo "  <li><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">общие\n";
echo "    принципы объектно-ориентированного\n";
echo "    программирования;</font></li>\n";
echo "  <li><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">классы,\n";
echo "    объекты и методы;</font></li>\n";
echo "  <li><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">простое и\n";
echo "    иерархическое наследование;</font></li>\n";
echo "  <li><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">абстрактные\n";
echo "    классы;</font></li>\n";
echo "  <li><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">перегрузка\n";
echo "    методов;</font></li>\n";
echo "  <li><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">функции\n";
echo "    для работы с классами и объектами в РНР.</font></li>\n";
echo "</ul>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Технология\n";
echo "объектно-ориентированного\n";
echo "программирования не очень сложна, но полное\n";
echo "усвоение всех концепций обычно требует\n";
echo "некоторого времени. Однако я гарантирую,\n";
echo "что затраченное время полностью окупится —\n";
echo "ООП поднимет эффективность вашей работы на\n";
echo "принципиально новый уровень.</font></p>\n";
echo "<table width=\"300\" border=\"0\" align=\"center\" cellpadding=\"3\" cellspacing=\"1\" bgcolor=\"#000066\" class=\"mtx1\">\n";
echo "<tr>\n";
echo "<td bgcolor=\"#CAEEFF\"><center>&nbsp;<a href=\"../Chapter 5/1.htm\"><strong>&lt;&lt;&lt;&nbsp;Назад</strong></a>&nbsp;\n";
echo "</center></td>\n";
echo "<td bgcolor=\"#CAEEFF\"><center>&nbsp;<a href=\"../index.html\"><strong>Содержание</strong></a>&nbsp;\n";
echo "</center></td>\n";
echo "<td bgcolor=\"#CAEEFF\"><center>&nbsp;<a href=\"../Chapter 7/1.htm\"><strong>Вперед&nbsp;&gt;&gt;&gt;</strong></a>&nbsp;\n";
echo "</center></td>\n";
echo "</tr>\n";
echo "</table>\n";
echo "</BODY></HTML>\n";
?>
