 |
IX. Функции класса/объектаЭти функции позволяют получать информацию о классах и инстанциировать
(создавать экземпляры) объекты. Вы можете получить имя класса, к которому принадлежит
объект, а также свойства и методы члена класса. Используя эти функции, вы можете
определить не только членство объекта в классе, но и наследование (т.е. - какой
класс расширяется классом объекта). В
первом примере мы сначала определяем базовый класс и расширение этого класса.
Базовый класс описывает овощ/vegetable в целом: съедобен ли он и какого цвета.
Подкласс Spinach добавляет метод для приготовления его и метод для определения,
готов ли он. Пример
1. classes.inc<?php
// базовый класс со свойствами и методами членов class Vegetable { var $edible;
var $color; function Vegetable( $edible, $color="green" ) { $this->edible
= $edible; $this->color = $color; } function is_edible() { return $this->edible;
} function what_color() { return $this->color; } } // конец определения класса
Vegetable // конец базового класса class Spinach extends Vegetable { var $cooked
= false; function Spinach() { $this->Vegetable( true, "green" ); } function
cook_it() { $this->cooked = true; } function is_cooked() { return $this->cooked;
} } // конец класса Spinach ?> |
|
Затем
мы инстанциируем 2 объекта этих классов и печатаем информацию о них, включая их
иерархию классов. Мы также определяем некоторые вспомогательные функции, в основном
для нормальной печати переменных.
Пример 2. test_script.php
<pre> <?php include "classes.inc"; // вспомогательные функции
function print_vars($obj) { $arr = get_object_vars($obj); while (list($prop, $val)
= each($arr)) echo "\t$prop = $val\n"; } function print_methods($obj) { $arr =
get_class_methods(get_class($obj)); foreach ($arr as $method) echo "\tfunction
$method()\n"; } function class_parentage($obj, $class) { global $$obj; if (is_subclass_of($$obj,
$class)) { echo "Object $obj belongs to class ".get_class($$obj); echo " a subclass
of $class\n"; } else { echo "Object $obj does not belong to a subclass of $class\n";
} } // инстанциируем (создаём) 2 объекта $veggie = new Vegetable(true,"blue");
$leafy = new Spinach(); // печатаем информацию об объектах echo "veggie: CLASS
".get_class($veggie)."\n"; echo "leafy: CLASS ".get_class($leafy); echo ", PARENT
".get_parent_class($leafy)."\n"; // показываем свойства veggie echo "\nveggie:
Properties\n"; print_vars($veggie); // и методы leafy echo "\nleafy: Methods\n";
print_methods($leafy); echo "\nParentage:\n"; class_parentage("leafy", "Spinach");
class_parentage("leafy", "Vegetable"); ?> </pre> |
|
В
этом примере важно отметить, что объект $leafy является экземпляром класса
Spinach, который является подклассом от Vegetable, следовательно,
последняя часть вышеприведённого скрипта выведет: [...]
Parentage: Object leafy does not belong to a subclass of Spinach Object leafy
belongs to class spinach a subclass of Vegetable |
-
Содержание
- call_user_method_array
- вызывает пользовательский метод, заданный с массивом параметров [не рекомендуется
применять]
- call_user_method - вызывает
пользовательский метод в специфическом объекте [не рекомендуется применять]
- class_exists
- проверяет, определён ли данный класс
- get_class_methods
— возвращает массив имён методов класса
- get_class_vars
— возвращает массив свойств по умолчанию данного класса
- get_class
— возвращает имя класса объекта
- get_declared_classes
— возвращает массив с именем определённого класса
- get_object_vars
— возвращает ассоциативный массив свойств объекта
- get_parent_class
- запрашивает имя родительского класса для объекта или класса
- is_a
— возвращает TRUE, если это объект данного класса или если он
имеет этот класс как один из его родительских классов
- is_subclass_of
— возвращает TRUE, если данный объект имеет этот класс как один
из его родительских классов
- method_exists
- проверяет, существует ли метод класса
|  |