Учебник по основам PHP. PHPBeginner

       

Объекты и классы


Описываемые в разделе функции позволяют получать информацию о классах и экземплярах объектов. Можно узнать, к какому классу принадлежит объект, его свойства и методы, а также их наследственную принадлежность.

В этом примере сначала определяется базовый класс, а затем его наследник.

<?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().


Содержание раздела