Отправляет email-рассылки с помощью сервиса Sendsay

PHP 5 для начинающих

  Все выпуски  

Информация о классах и объектах


PHP 5 для начинающих

Помимо прямого доступа к свойствам и методам ($obj->propertyName, $this->methodName(), ClassName::staticPropertyName и т. п.), PHP предоставляет ряд встроенных объектно-ориентированных «информационных» функций (см. «Встроенные функции»).

В PHP 5 количество встроенных функций для работы с классами и объектами возросло за счет добавления функций для работы с интерфейсами и некоторых других. Был введен также новый оператор (см. «Оператор instanceof»).

Кроме того, в PHP 5 появилась поддержка специального программного интерфейса (API) для доступа к элементам новой объектной модели (см. «Рефлексия»).

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

Функция get_declared_classes(). Возвращает массив объявленных в данном скрипте (а также в подключенных библиотеках) классов.

$declaredClasses = get_declared_classes();

Функция get_declared_interfaces(). Возвращает массив объявленных в данном скрипте (а также в подключенных библиотеках) интерфейсов.

[Замечание]Замечание

Функция доступна, начиная с PHP 5.

$declaredInterfaces = get_declared_interfaces();

Функция class_exists(). Проверяет, был ли определен класс с заданным названием. PHP 5 по умолчанию использует магическую функцию __autoload(), если она определена. Отключить использование автозагрузки можно с помощью второго необязательного параметра со значением false. Возвращает логическое значение.

if (class_exists('Foo')) { /* ... */ }

Функция interface_exists(). Проверяет, был ли определен интерфейс с заданным названием. По умолчанию использует магическую функцию __autoload(), если она определена. Отключить использование автозагрузки можно с помощью второго необязательного параметра со значением false. Возвращает логическое значение.

[Замечание]Замечание

Функция доступна, начиная с версии PHP 5.0.2.

if (interface_exists('Foo')) { /* ... */ }

Функция get_class(). Возвращает название класса, к которому принадлежит заданный объект (или false, если задан не объект).

$className = get_class($obj);
[Замечание]Замечание

В PHP 5 параметр, задающий объект, может быть опущен, если функция вызывается внутри объектного метода (подразумевается $this).

Функция get_parent_class(). Возвращает название родительского класса заданного объекта или класса (либо false в случае его отсутствия).

$parentName = get_parent_class($obj);
$parentName = get_parent_class('Foo');
[Замечание]Замечание

В PHP 5 параметр, задающий объект или название класса, может быть опущен, если функция вызывается внутри объектного метода (подразумевается $this).

Функция is_subclass_of(). Проверяет, является ли заданный объект наследником (в том числе, опосредованным) заданного класса. Возвращает логическое значение.

if (is_subclass_of($obj, 'Foo')) { /* ...
*/ }
[Замечание]Замечание

Начиная с версии PHP 5.0.3, для проверки может быть задан не только объект, но и название класса.

if (is_subclass_of('Bar', 'Foo'))
{ /* ... */ }

Функция get_class_methods(). Возвращает массив названий методов, определенных для заданного класса или объекта.

$methodNames = get_class_methods('Foo');
$methodNames = get_class_methods($foo);

Функция get_class_vars(). Возвращает ассоциативный массив публичных свойств заданного класса со значениями по умолчанию.

$defaultProperties = get_class_vars('Foo');

Функция get_object_vars(). Возвращает ассоциативный массив публичных свойств заданного объекта с их текущими значениями.

$properties = get_object_vars($foo);

Функция method_exists(). Проверяет существование заданного метода для заданного класса. Возвращает логическое значение.

if (method_exists($obj,
'methodName')) { /* ... */ }

Функция property_exists(). Проверяет, обладает ли заданный класс или объект заданным свойством (и видимо ли это свойство из данного контекста). Возвращает логическое значение.

[Замечание]Замечание

Функция доступна, начиная с версии PHP 5.1.0RC1.

if (property_exists('ClassName', 'methodName')) { /* ... */ }
if (property_exists($obj, 'methodName')) { /* ... */ }

Современные приложения зачастую включают несколько десятков классов, которые имеют сотни свойств и методов. Ориентироваться в них становится не так уж просто. Возникает потребность в каком-то механизме инспекции многочисленных классов, объектов, интерфейсов, свойств и методов, используемых в приложении; причем, механизме, реализованном средствами самого PHP. Собственно идея такой инспекции называется интроспекцией (introspection), или самоанализом, а непосредственный процесс ее осуществления - рефлексией (reflection), или отражением [8].

PHP 5 реализует идею самоанализа в виде удобного программного интерфейса - Reflection API. С его помощью можно получать информацию об элементах объектной модели и других программных элементах во время исполнения скрипта, получать доступ к отдельным свойствам и вызывать отдельные методы, готовить документацию и т. д. [11]

Reflection API включает в себя один интерфейс и девять классов [3].


Рассмотрим статический метод export(), объявленный в интерфейсе Reflector и используемый во всех классах, кроме ReflectionException. Этот метод используется для получения информации о соответствующем программном элементе.


Created with DocBook


В избранное