Узнать класс объекта 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 )) )
Ну вот мы и разобрались с тем, как получать информацию об объекте или классе, методах, свойствах и наследовании. Увидимся в новых материалах.
Понравился материал и хотите отблагодарить?
Просто поделитесь с друзьями и коллегами!
Смотрите также:
Поиск по сайту
Фреймворк 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() — Проверяет, содержит ли объект в своем дереве предков указанный класс