Объекты и классы
Функции работы с данными
🕛 01.11.2006, 13:11
Описываемые в разделе функции позволяют получать информацию о классах и экземплярах объектов. Можно узнать, к какому классу принадлежит объект, его свойства и методы, а также их наследственную принадлежность. В этом примере сначала определяется базовый класс, а затем его наследник.
<?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().