В
РНР существует несколько стандартных функций для работы с классами и объектами;
эти функции рассматриваются в следующих разделах. Все они часто используются на
практике, особенно в процессе разработки интерфейса, администрирования кода и
диагностики ошибок. get_class_methods( ) Функция get_class_methods(
) возвращает массив имен методов класса с заданным именем. Синтаксис функции get_class_methods(
): array get_class_methods (string имя_класса) Простой пример использования
get_class_methods( ) приведен в листинге 6.7. Листинг 6.7. Получение списка
методов класса <? ... class Airplane extends Vehicle { var
$wingspan; function setWingSpan($wingspan) { $this->wingspan =
$wingspan; } function getWingSpan() { return $this->wingspan; } } $cls_methods
= get_class_methods(Airplane); // Массив $cls_methods содержит имена всех
методов, // объявленных в классах "Airplane" и "Vehicle" ?> Как
видно из листинга 6.7, функция get_class_methods( ) позволяет легко получить информацию
обо всех методах, поддерживаемых классом. get_class_vars( ) Функция
get_class_vars( ) возвращает массив имен атрибутов класса с заданным именем. Синтаксис
функции get_class_vars( ): array get_class_vars (string имя_класса) Пример
использования get_class_vars( ) приведен в листинге 6.8. Листинг 6.8. Получение
списка атрибутов класса функцией get_class_vars( ) <? class Vehicle
{ var $model; var $current_speed; } class Airplane extends Vehicle
{ var Swingspan; } $a_class = "Airplane"; $attribs = get_class_vars($a_class); //
$attribs = array ( "wingspan", "model", "current_speed") ?> Массив
$attribs заполняется именами всех атрибутов класса Airplane. get_object_vars(
) Функция get_object_vars( ) возвращает ассоциативный массив с информацией
обо всех атрибутах объекта с заданным именем. Синтаксис функции get_object_vars(
): array get_object_vars (object имя_обьекта) Пример использования
функции get_object_vars( ) приведен в листинге 6.9. Листинг 6.9. Получение
информации о переменных объекта <? class Vehicle { var Swheels; } class
Land extends Vehicle { var Sengine; } class car extends Land
{ var $doors: function car($doors, $eng, $wheels) { $this->doors
= $doors; $this->engine = $eng; $this->wheels = $wheels; } function
get_wheels() { return $this->wheels; } } $toyota =
new car(2,400,4); $vars = get_object_vars($toyota); while (list($key,
$value) = each($vars)) : print "$key ==> $value <br>"; endwhile; //
Выходные данные: // doors ==> 2 // engine ==> 400 // wheels
==> 2 ?> Функция get_object_vars( ) позволяет быстро получить
всю информацию об атрибутах конкретного объекта и их значениях в виде ассоциативного
массива. method_exists( ) Функция method_exists( ) проверяет, поддерживается
ли объектом метод с заданным именем. Если метод поддерживается, функция возвращает
TRUE, в противном случае возвращается FALSE. Синтаксис функции method_exists(
): bool method_exi sts (object имя_обьекта. string имя_метода) Пример
использования метода method_exists( ) приведён в листинге 6.10. Листинг
6.10. Проверка поддержки метода объектом при помощи функции method_exists() <? class
Vehicle { ... } class Land extends Vehicle { var $fourWheel; function
setFourWheel Drive() { $this->fourWeel = 1; } } //
Создать объект с именем $саr $car = new Land; // Если метод "fourWheelDrive"
поддерживается классом "Land" // или "Vehicle", вызов
method_exists возвращает TRUE; // в противном случае возвращается FALSE. //
В данном примере method_exists() возвращает TRUE. if (method_exists($car,
"setfourWheelDrive")) : print "This car is equipped with
4-wheel drive"; else : print "This car is not equipped with
4-wheel drive"; endif; ?> В листинге 6.10 функция method_exists
( ) проверяет, поддерживается ли объектом $car метод с именем setFourWheelDrive(
). Если метод поддерживается, функция возвращает логическую истину и фрагмент
выводит соответствующее сообщение. В противном случае возвращается FALSE и выводится
другое сообщение. get_class( ) Функция get_class( ) возвращает имя
класса, к которому относится объект с заданным именем. Синтаксис функции get_class(
): string get_class(object имя_объекта); Пример использования get_class(
) приведен в листинге 6.11. Листинг 6.11. Получение имени класса функцией
get_class( ) <? class Vehicle { ... class Land extends
Vehicle { ... } // Создать объект с именем $саr $car = new Land; //
Переменной $class_a присваивается строка "Land" $class_a = get_class($car); ?> В
результате переменной $class_a присваивается имя класса, на основе которого был
создан объект $саr. get_parent_class( ) Функция get_parent_class(
) возвращает имя родительского класса (если он есть) для объекта с заданным именем.
Синтаксис функции get_parent_dass( ): string get_parent_class (object имя_обьекта); Листинг
6.12 демонстрирует использование get_parent_class( ). Листинг 6.12. Получение
имени родительского класса функцией get_parent_class( ) <? class
Vehicle { ... } class Land extends Vehicle { ... } //
Создать объект с именем $саr $саr = new Land; // Переменной $parent присваивается
строка "Vehicle" $parent = get_parent_dass($car); ?> Как
и следовало ожидать, при вызове get_parent_class( ) переменной $parent будет присвоена
строка "Vehicle". is_subclass_of( ) Функция is_subclass_of(
) проверяет, был ли объект создан на базе класса, имеющего родительский класс
с заданным именем. Функция возвращает TRUE, если проверка дает положительный результат,
и FALSE в противном случае. Синтаксис функции is_subclass_of( ): bool is_subclass_of
(object объект, string имя_класса) Использование is_subclass_of( ) продемонстрировано
в листинге 6.13. Листинг 6.13. Использование функции is_subdass_of( ) <? class
Vehicle { ... } class Land extends Vehicle { ... } $auto
= new Land; // Переменной $is_subclass присваивается TRUE $is_subclass
= is_subclass_of($auto, "Vehicle"); ?> В листинге 6.13
переменной $is_subclass( ) присваивается признак того, принадлежит ли объект $auto
к субклассу родительского класса Vehicle. В приведенном фрагменте $auto относится
к классу Vehicle; следовательно, переменной $is_subclass( ) будет присвоено значение
TRUE. get_declared_classes( ) Функция get_declared_classes( ) возвращает
массив с именами всех определенных классов (листинг 6.14). Синтаксис функции get_declared_classes(
): array get_declared_classes( ) Листинг 6.14. Получение списка классов
функцией get_declared_classes( ) <? class Vehicle { ... } class
Land extends Vehicle { ... } $declared_classes = get_declared_classes(); //
$declared_classes = array("Vehicle", "Land") ?> Итоги В
этой главе были представлены некоторые концепции объектно-ориентированного программирования,
при этом особое внимание уделялось их реализации в языке РНР. В частности, были
рассмотрены следующие темы: общие принципы объектно-ориентированного программирования;
классы, объекты и методы; простое и иерархическое наследование; абстрактные
классы; перегрузка методов; функции для работы с классами и объектами
в РНР. Технология объектно-ориентированного программирования не очень сложна,
но полное усвоение всех концепций обычно требует некоторого времени. Однако я
гарантирую, что затраченное время полностью окупится - ООП поднимет эффективность
вашей работы на принципиально новый уровень. |