Объекты и классы
Описываемые в разделе функции позволяют получать информацию о классах и экземплярах объектов. Можно узнать, к какому классу принадлежит объект, его свойства и методы, а также их наследственную принадлежность.
В этом примере сначала определяется базовый класс, а затем его наследник.
<?php // Пример 1 Файл с определениями классов: classes. inc class ИсточникС вета { // базовый класс var $>правляемость; //неизменное логическое значение var $Яркость; // конструктор function ИсточникСвета ( $управляемость. $яркость="неяркий" ) { $this->Управляемость = $управляемость; $this->flpKOCTb = $яркость: } function 15_управляемо() { return $1гп5->Улравляемость. } function whatjipKOCTbО { return $this->Яркость; } } // конец определения класса ИсточникСвета // Расширение базового класса class Лампочка extends Источник Света { var $Включена = FALSE. // конструктор function Ла»мпочка() ( $this->ИсточникСвета( TRUE, "яркий" ): // Лампочка - это ИсточникСвета (управляемый, "яркий") } function включить() { $this->Включена = TRUE. } function 15_вклочена () { return $this->Включена; } } // конец определения класса Лампочка ?>
Следующий сценарий создает экземпляры объектов на основе определенных классов, а затем выводит основную информацию, которую можно узнать о классах и объектах средствами РНР 4.
<php // Пример 2 Файл test_scnpt.uhp include "classes.тс": // определения функций function print_vars($obj) ( $arr = get_object_vars($obj); while (list($prop. $val) = each($arr)) echo "\t - свойство '$ргор' = \"$val\"\n": i function pnnt_methods($cbj) { $arr - get_class_methods(qet_class($obj)): foreach (Jarr as Smethod) echo "\t - метод: $rnethodition"; } function class_parentagp($obj. Sclass) { global $$obj: if (is_subclass_of($$obj Sclass)), { erho "\пОбьркт $obj принадлежит к классу: " get_class($$obj); echo " поцкпасса $class\n"; } else { echo "Объект $obj не принадлежит к подклассу $class\n"; } i / конец определения функций еспо "Доступные сценарий '$PHP_SELF' классы\n": iclss - get_Jeclared_classesf > forear.h ($c.isb as $cis name) echo "\t- *cls_namei)\n": // инициализируем 2 объекта $солние = new ИсточникСвета СTRUE."очень яркий"); $эл_лампочка * new Лампочка () // выясняем информацию об объектах echo "\пКЛАСС объекта 'солнце'. ' " get_class($coлнце) '"\n". еспо "КЛАСС обьекта 'эл_лампочка' ' .get сlаss(эл_ ланлочка); echo "'. Родительский Класс '" get parent сlass(эл_лампочка).°)\гГ; // проследить свойства объекта 'солнце' echo "\n Свойства объекта 'солнце' \п"; print \'аг5($солнце). // и свойства объекта 'эл_лампочка echo "\n Методы объекта 'эл_лампочка': \n": pnnt_methocls(эл_лампочка): echo "\n Наследственность:\n": сlass _раrentаgе ("эл_лампочка", "Лампочка"): сlаss _раrentаgе ("эл_лампочка". "ИсточникСвета"):
При запуске сценария в системе РНР 4.0.4 для Windows он выводит:
Доступные сценарию классы class. stdClass() class: OverloadedTestClass() class: Directory()class COMO class: ИсточникСвета() class: Лампочка()КЛАСС объекта 'солнце': 'ИсточникСвета' КЛАСС объекта 'эл_лампочка': 'Лампочка'. Родительский Класс (ИсточникСвета) Свойства обьекта 'солнце': - свойство 'Управляемость' = "1" - свойство 'Яркость' = "очень яркий" Методы объекта 'эл_лампочка': - метод ИсточникСвета() - метод. 13_управляемо() - метод: what_яpKocTb() - метод: Лампочка() - метод: включить() метод- 15_включена() Наследственность: Объект эл_лампочка не принадлежит к подклассу: Лампочка Объект 'эл_лампочка' принадлежит к классу: 'Лампочка', подкласса: 'ИсточникСвета'
get_ declared_classes
Получение списка доступных классов
array get_declared_classes (void)
Возвращает в массиве перечисление имен классов, декларированных для текущего сценария.
В РНР 4 в начале возвращаемого массива указываются имена трех дополнительных классов: stdClass (определен в Zend/zend.c), Over-loadedTestClass (определен в ext/standard/basic_functions.c) и Directory (определен в ext/standard/dir.c); для системы Windows доступен также класс Com.
class_ exists
Проверка существования класса
booll_ class_exists (string class_name)
Возвращает TRUE, если для класса classjiame имеется определение; иначе — FALSE.
get_class_methods
Получение списка методов класса
array get_class_methods (string class_name)
Возвращает в массиве перечисление методов класса с именем class_ name.
См. также: get_class_vars(), get_object_vars().
get_class_vars
Получение списка свойств класса
array get_class_vars (string class_name)
Возвращает в массиве перечисление свойств класса с именем class_ name.
См. также: get_classjnethods(), get_object_vars().
get _class
Получение класса объекта
string get_class (object obj)
Возвращает имя класса, к которому принадлежит объект obj.
См. также: get_parent_class(), is_subclass_of().
get_parent_class
Получение имени родительского класса объекта
string get_parent_c!ass (object obj)
Возвращает имя родительского класса для класса, которому принадлежит объект obj.
См. также: get_class(), is_subclass_of().
is_subclass_of
Проверка наследования класса
boot is_subclass_of (object obj, string superclass)
Возвращает TRUE, если объект obj принадлежит к классу, наследному от класса superclass, иначе возвращает FALSE.
См. также: get_class(), get_parent_class().
get_object_vars
Получение списка свойств объекта
array get_object_vars (object obj)
Возвращает в ассоциативном массиве инициализированные для объекта obj свойства. Если переменным класса, к которому принадлежит объект obj, не были присвоены значения, то такие переменные в возвращаемый массив не включаются.
<?php class Point2D { // точка на плоскости var $x. $у: var Slabel. //конструктор function Point2D($x. $y) { $this->x = $х; $this->y = $у. } function setl_abel($label) { $this->label = Slabel. } function getPointO { return arrayC'x" => $this->x. "y" => $this->y. "label" => $this->label); } } $pl = new Point2D(1.233. 3.445); pnnt_r(get_object_vars($pl)); // "Slabel" объявлена, но не инициализирована // Array // ( // [х] => 1.233 // [у] => 3 445 // ) $pl->setl_abel("point #1"); рп nt_r(get_object_vars( $pl)): // Array // ( // [х] => 1.233 // [у] => 3.445 // [label] => point #1 // ) ?>
См. также: get_classjnethods(), get_class_vars().
method_exists
Проверка наличия у объекта указанного метода
bool method_exists (object object, string method_name)
Возвращает TRUE, если объект obj имеет метод с именем methodjiame, в противном случае возвращает FALSE.
call_ user_ method
Косвенный вызов метода объекта
mixed calljjserjnethod (string method_name, object obj [, mixed parameter [, mixed ...]])
Вызывает метод method_name объекта obj. Возможные параметры методу можно передать в последующих аргументах parameter.
<?php class Country { // объявление класса var $NAME; var $TLD. function Country($name. $tld) { $this->NAME = $name; $this->TLD = Hid; } function pnnt_info($prestr="") { echo Sprestr "Country: ",$this->NAHE. "\n": echo Sprestr."Top Level Domain: ".$this->TLD."\n": } } // создаем экземпляр класса Sentry = new CountryC'PoccMfl". "ru"); echo "* Прямой вызов метода класса \n", Scntry->print_info(), echo "\n* Косвенный вызов того же метода класса \n": calljjserjnethod ("pnntjnfo". Sentry. "\t"): ?>
См. также call_user_func().