Узнать класс объекта php

Узнать класс объекта php

Reg.ru: домены и хостинг

Крупнейший регистратор и хостинг-провайдер в России.

Более 2 миллионов доменных имен на обслуживании.

Продвижение, почта для домена, решения для бизнеса.

Более 700 тыс. клиентов по всему миру уже сделали свой выбор.

Бесплатный Курс «Практика HTML5 и CSS3»

Освойте бесплатно пошаговый видеокурс

по основам адаптивной верстки

на HTML5 и CSS3 с полного нуля.

Фреймворк Bootstrap: быстрая адаптивная вёрстка

Пошаговый видеокурс по основам адаптивной верстки в фреймворке Bootstrap.

Научитесь верстать просто, быстро и качественно, используя мощный и практичный инструмент.

Верстайте на заказ и получайте деньги.

Что нужно знать для создания PHP-сайтов?

Ответ здесь. Только самое важное и полезное для начинающего веб-разработчика.

Узнайте, как создавать качественные сайты на PHP всего за 2 часа и 27 минут!

Создайте свой сайт за 3 часа и 30 минут.

После просмотра данного видеокурса у Вас на компьютере будет готовый к использованию сайт, который Вы сделали сами.

Вам останется лишь наполнить его нужной информацией и изменить дизайн (по желанию).

Изучите основы HTML и CSS менее чем за 4 часа.

После просмотра данного видеокурса Вы перестанете с ужасом смотреть на HTML-код и будете понимать, как он работает.

Вы сможете создать свои первые HTML-страницы и придать им нужный вид с помощью CSS.

Бесплатный курс «Сайт на WordPress»

Хотите освоить CMS WordPress?

Получите уроки по дизайну и верстке сайта на WordPress.

Научитесь работать с темами и нарезать макет.

Бесплатный видеокурс по рисованию дизайна сайта, его верстке и установке на CMS WordPress!

Хотите изучить JavaScript, но не знаете, как подступиться?

После прохождения видеокурса Вы освоите базовые моменты работы с JavaScript.

Развеются мифы о сложности работы с этим языком, и Вы будете готовы изучать JavaScript на более серьезном уровне.

*Наведите курсор мыши для приостановки прокрутки.

PHP: Получение информации об объекте или классе, методах, свойствах и наследовании

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

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

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

$product = getProduct(); if ( get_class( $product ) == ‘CdProduct’ )

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

Ниже привожу определение функции getProduct().

Как видите, функция getProduct() просто создает экземпляр объекта СdProduct и возвращает его. Вскоре мы воспользуемся этой функцией.

Функция get_class() выдает достаточно специфическую информацию, в то время как нам обычно нужно что-то более общее и простое — например, информация о принадлежности к семейству классов.

Допустим, мы хотим убедиться, что объект принадлежит семейству ShopProduct, но при этом не имеет значения, к какому классу конкретно: BookProduct или CdProduct. Для этой цели в PHP предусмотрен оператор instanceof.

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

Оператор возвращает значение true, если объект является экземпляром класса указанного типа.

$product = getProduct(); if ( $product ) instanceof ShopProduct )

Получение информации о методах

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

print_r (get_class_methods('CdProduct'));

Предполагая, что класс CdProduct существует, получим такой результат.

Array ( 0 => __construct 1 => getPlayLength 2 => getSummaryLine 3 => getProducerFirstName 4 => getProducerMainName 5 => setDiscount 6 => getDiscount 7 => getTitle 8 => getPrice 9 => getProducer 10 => setID 11 => getInstanse )

Все очень просто — мы передаем функции имя класса и распечатываем полученный массив с помощью функции print_r().

C таким же успехом мы могли бы передать функции get_class_methods() не только класс, но и конкретный объект.

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

$product = getProduct(); // получим объект $method = "getTitle"; // определим имя вызываемого метода print $product->$method(); // вызовем метод

Всё вроде бы неплохо, однако такой подход таит в себе определенную опасность. Что произойдет, если метода не существует? Очевидно, сценарий завершится ошибкой. У нас уже есть опыт проверки того, существует ли метод.

if (in_array($method, get_class_methods($product ))) < print $product->$method(); // вызовем метод >

Прежде, чем вызвать метод, мы проверяем, есть ли его имя в массиве, возвращенном функцией get_class_methods(). Неплохое решение, однако в PHP для этой цели уже изобретен другой «велосипед»)

Имена методов можно проверить с помощью двух функций: is_callable() и method_exists(). Из этих двух вариантов is_callable() — более сложная.

В качестве первого аргумента ей передается строковая переменная, определяющая имя функции. Если заданная функция существует и ее можно вызвать, функция is_callable() возвращает значение true.

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

Функция вернет значение true, если указанный метод существует в классе.

if ( is_callable( array( $product, $method) ) ) < print $product->$method(); // вызовем метод >

У функции is_callable() также есть второй необязательный аргумент — булево значение. Если установить для него значение true, то функция будет проверять только синтаксис функции или метода, имя которого задано, а не его реальное существование.

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

if ( method_exists( $product, $method ) ) < print $product->$method(); // вызовем метод >

Важно!
То, что метод существует, еще не означает, что его можно вызвать. функция method_exists() возвращает значение true для всех методов: закрытых (private), защищенных (protected) и, конечно же, общедоступных (public).

Получение информации о свойствах

Точно так же, как можно запросить список методов класса, можно запросить и список его свойств. Функции get_class_vars() передается имя класса, а она возвращает ассоциативный массив.

Имена свойств сохраняются в виде ключей этого массива, а значения свойств — в виде значений.

Давайте выполним проверку объекта CdProduct. Для наглядности добавим к классу общедоступное свойство: CdProduct::$coverUrl.

print_r( get_class_vars( 'CdProduct' ) );

будет показано только общедоступное свойство.

Получение информации о наследовании

С помощью функций для работы с классами можно также выявлять отношения наследования.

Например, с помощью функции get_parent_class() можно узнать имя родительского класса для указанного класса.

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

print get_parent_class('CdProduct');

мы получим имя родительского класса ShopProduct, как и можно было ожидать.

С помощью функции is_subclass_of() можно также проверить, является ли класс дочерним для другого класса.

Этой функции передается ссылка на дочерний объект и имя родительского класса. Функция возвращает значение true, если второй класс является суперклассом первого аргумента.

$product = getProduct(); // получим объект if ( is_subclass_of( $product, ‘ShopProduct’ ) )

Функция is_subclass_of() сообщит информацию только об отношениях наследования в классе, однако не поможет нам узнать, реализует ли класс интерфейс — для этой цели следует использовать оператор instanceof.

Кроме того, можно воспользоваться функцией call_implements(), которая является частью SPL (Standard PHP Library). Этой функции передается имя класса или ссылка на объект, а она возвращает массив имен интерфейсов.

if ( in_array( ‘someInterface’, class_implements( $product )) )

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

Понравился материал и хотите отблагодарить?
Просто поделитесь с друзьями и коллегами!

Смотрите также:

CodeIgniter: жив или мертв?

Функции обратного вызова, анонимные функции и механизм замыканий

Применение функции к каждому элементу массива

Слияние массивов. Преобразование массива в строку

Деструктор и копирование объектов с помощью метода __clone()

Эволюция веб-разработчика или Почему фреймворк - это хорошо?

Магические методы в PHP или методы-перехватчики (сеттеры, геттеры и др.)

PHP: Удаление элементов массива

Ключевое слово final (завершенные классы и методы в PHP)

50 классных сервисов, программ и сайтов для веб-разработчиков

Поиск по сайту

Фреймворк Yii2: первая практика

Фреймворк Yii2: теория и первая практика

Овладейте начальными знаниями и навыками по работе в фреймворке Yii2, которые необходимы любому веб-разработчику!

Дизайн лендинга

Веб-дизайн: практический курс создания лендинга

Создавайте дизайн любых сайтов — для себя и на заказ!

В Гармонии с Кодом

Если вы хотите создать сайт своими руками, то вы оказались в нужном месте. Здесь вы найдете обучающие видеокурсы, а также множество видеоуроков и статей по веб-разработке и созданию сайтов.

Уважаемый веб-мастер! В создание данного ресурса вложено много сил и времени. Буду рад, если при копировании материалов вы будете ставить активную ссылку на Codeharmony.ru.

Источник

get_class

Возвращает имя класса, экземпляром которого является объект object .

Список параметров

Тестируемый объект. Внутри класса этот параметр может быть опущен.

Возвращаемые значения

Возвращает имя класса, к которому принадлежит экземпляр object . Возвращает FALSE , если object не является объектом.

Если параметр object опущен внутри класса, будет возвращено имя этого класса.

Ошибки

Если get_class() будет вызвана с чем-то другим, не являющимся объектом, будет вызвана ошибка уровня E_WARNING .

Список изменений

Версия Описание
5.3.0 NULL стал значением по умолчанию для параметра object , поэтому передача NULL в object теперь имеет тот же самый эффект, как и отсутствие какой-либо передачи вообще.

Примеры

Пример #1 Использование get_class()

class foo function name ()
echo «My name is » , get_class ( $this ) , «\n» ;
>
>

// создание объекта
$bar = new foo ();

// внешний вызов
echo «Its name is » , get_class ( $bar ) , «\n» ;

// внутренний вызов
$bar -> name ();

Результат выполнения данного примера:

Its name is foo My name is foo

Пример #2 Использование get_class() в родительском классе

abstract class bar public function __construct ()
var_dump ( get_class ( $this ));
var_dump ( get_class ());
>
>

Результат выполнения данного примера:

Смотрите также

  • get_called_class() — Имя класса, полученное с помощью позднего статического связывания
  • get_parent_class() — Возвращает имя родительского класса для объекта или класса
  • gettype() — Возвращает тип переменной
  • is_subclass_of() — Проверяет, содержит ли объект в своем дереве предков указанный класс

Источник

Читайте также:  Поиск похожей строки php
Оцените статью