Получение информации об объекте или классе

Опубликовал read-php в 28.01.2011 Категория: Средства для работы с объектами PHP

Как вы знаете, с помощью уточнений типов классов можно ограничить тип аргументов метода. Но даже используя эту возможность, не всегда можно быть уверенным в отношении типа объекта. Например, на данный момент, в РНР не разрешалось ограничивать тип класса, возвращаемого из метода или функции.

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

$product = getProduct () ;    i

if ( get_class( $product ) == ‘CDProduct1 ) {

print «\$product — объект класса CDProduct\n»,-

В данном фрагменте кода мы получаем что-то от функции getProduct (). Чтобы быть абсолютно уверенными, что это объект типа CDProduct, мы используем метод get_class().

Вот определение функции getProduct ().

function getProduct() {

return new CDProduct( «Пропавший без вести», «Группа», «ДДТ», 10.99, 60.33 );

}

Функция getProduct () просто создает экземпляр объекта CDProduct и возвращает его. Мы воспользуемся данной функцией в этом разделе.

Функция get class () — это очень специфическое средство. Обычно же нужна более общая информация о принадлежности к семейству классов. Предположим, нам нужно знать, что объект принадлежит семейству ShopProduct, но при этом не имеет значения, к какому классу конкретно: BookProduct или CDProduct. Для этой цели в PHP предусмотрен оператор instanceof.

В PHP 4 оператор instanceof не поддерживается. Вместо этого в PHP 4 была предусмотрена функция is_a (), которая в PHP 5 не рекомендуется к использованию. Оператор instanceof работает с двумя операндами: объектом, который нужно протестировать (указывается слева от ключевого слова instanceof), и именем класса или интерфейса справа. Оператор возвращает значение true, если объект является экземпляром класса указанного типа.

$product = getProduct();

if ( $product instanceof ShopProduct ) {

print «\$product — объект типа ShopProduct\n»;

Комментариев нет

Добавить комментарий