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 ) , "
" ;
>
>
// создание объекта
$bar = new foo ();
// внешний вызов
echo "Its name is " , get_class ( $bar ) , "
" ;
// внутренний вызов
$bar -> name ();
Результат выполнения данного примера:
Пример #2 Использование get_class() в родительском классе
abstract class bar <
public function __construct ()
<
var_dump ( get_class ( $this ));
var_dump ( get_class ());
>
>
class foo extends bar <
>
Результат выполнения данного примера:
Смотрите также
- get_called_class() – Имя класса, полученное с помощью позднего статического связывания
- get_parent_class() – Возвращает имя родительского класса для объекта или класса
- gettype() – Возвращает тип переменной
- is_subclass_of() – Проверяет, содержит ли объект в своем дереве предков указанный класс
ООП (объектно-ориентированное программирование) – это альтернативный подход в программировании на PHP, в пику процедурному способу. Однако не получится перескочить основы PHP, заложенные в процедурном методе и сразу начать изучать ООП. Вы должны уже понимать, что такое переменная, функция и другие базовые понятия.
Принципы ООП PHP
Принцип ООП заключается в самодостаточности отдельных кусков кода.
Понятие класса и объекта в ООП
Класс – это шаблон кода, с помощью которого создаются объекты. Авторы статей, пытаются объяснить понятие класса в ООП, приводя в пример машины, кошек и собак. Это классные примеры, но слишком далекие от реальных задач в программировании.
На мой взгляд очень удачное сравнение с анкетой. Класс это пустой бланк анкеты (образец), а заполненная анкета с личными данными реального человека – объект. Вот лежит этот образец в какой-нибудь конторе или на сайте. Пришло 100 человек и каждый из них, заполнил анкету (класс) со своими личными данными. Каждая новая заполненная анкета – новый объект.
Методы и свойства объекта
Чтобы объявить класс, пишут ключевое слово class и дают ему осмысленное название. Внутри класса описываются свойства и методы объекта. У анкеты есть поля (имя, фамилия, пол, возраст и.т.д), которые являются свойствами объекта (переменные).
class anketaExample
<
// свойства и методы объекта
>
Для создания объекта, пишем ключевое слово new и указываем имя класса, объект (экземпляр) которого хотим создать.
Что такое методы? В классическом понимании методы – это функции. Удалить, размножить, распечатать, переслать – все это методы объекта. Некий набор действий, которые можно проделывать с анкетой.
Любимый всеми авторами статей по ООП, пример объекта из реальной жизни – это кот. У кота есть свойства:
Ещё котам присущи методы:
Но зачем создавать класс ради одного кота? А фишка в том, что свойства у всех котов одинаковые, а вот их значения разные. Ведь каждый кот индивидуален. По классу (шаблону) создаются разные объекты.
Пример в PHP ООП
Вернемся к нашей анкете и создадим класс anketaExample и перечислим названия полей анкеты (name, age, email, phone). Это и есть свойства. Перед каждым свойством нужно указать модификатор области видимости. Мы хотим, чтобы свойства были глобальными, поэтому добавим ключевое слово public. Это значит, что мы можем работать с заданными свойствами и вне класса anketaExample.
Присвоим свойствам значения, чтобы они не были пустыми.
class anketaExample
<
public $name = Max;
public $age = 40;
public $email = max@gmail.com;
public $phone = 34533334;
>
Теперь создадим объект.
$user1 = new anketaExample();
На основе одного класса, объектов может создаваться много.
$user1 = new anketaExample();
$user2 = new anketaExample();
Для объекта $user2, переопределим значения у свойств.
$user2->name = ‘Jack’;
$user2->age = ’25’;
$user2->email = jack@gmail.com;
$user2->phone = 7543099;
Для вывода на странице данные анкеты первого пользователя (объект $user1), воспользуемся следующей конструкцией.
А что делать, если таких пользователей будет сотни или тысячи. Согласитесь, что такой вывод данных неоптимальный, и мы плавно переходим к методам объекта.
Методы объекта
У объекта анкета помимо свойств, ещё есть методы. Перед нами стоит задача выводить информацию о пользователях динамически, прописав код вывода только один раз. Для объявления метода пишем ключевое слово public, имя метода с круглыми скобками и внутри фигурных скобок, тело метода.
Внутри класса мы обращаемся к свойствам объекта через специальную конструкцию $this (этот), но не через сам объект $user1. Вот так неправильно и не имеет смысла:
Это важный и ключевой момент в понимании методов.
public function getAnketaInfo() <
Имя: <$this->name>
Возраст: <$this->age>
Email: <$this->email>
Телефон: <$this->phone>;
>
Данный код выводит данные нужного пользователя.
echo $user1->getAnketaInfo();
echo $user2->getAnketaInfo();
Весь код целиком:
// создание класса
class anketaExample
<
public $name = Max;
public $age = 40;
public $email = max@gmail.com;
public $phone = 34533334;
public function getAnketaInfo() <
Имя: <$this->name>
Возраст: <$this->age>
Email: <$this->email>
Телефон: <$this->phone>;
>
>
// создание объекта класса
$user1 = new anketaExample();
$user2 = new anketaExample();
// вывод данных пользователя
echo $user1->getAnketaInfo();
echo $user2->getAnketaInfo();
Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
Она выглядит вот так:
Комментарии ( 0 ):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.
Copyright © 2010-2020 Русаков Михаил Юрьевич. Все права защищены.
Освойте бесплатно наиболее простой, быстрый и гибкий способ создавать адаптивные веб-сайты.
Дизайн лендинга
Создавайте дизайн любых сайтов – для себя и на заказ!
Популярное
- Главная
- ->
- Материалы
- ->
- 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(). В качестве аргумента ей передается объект любого типа, а она возвращает в виде строки его имя класса.
В данном фрагменте кода мы получаем что-то от функции getProduct(). Чтобы быть абсолютно уверенными, что это объект типа CdProduct, мы используем функцию get_class().
Ниже привожу определение функции getProduct().
Как видите, функция getProduct() просто создает экземпляр объекта СdProduct и возвращает его. Вскоре мы воспользуемся этой функцией.
Функция get_class() выдает достаточно специфическую информацию, в то время как нам обычно нужно что-то более общее и простое – например, информация о принадлежности к семейству классов.
Допустим, мы хотим убедиться, что объект принадлежит семейству ShopProduct, но при этом не имеет значения, к какому классу конкретно: BookProduct или CdProduct. Для этой цели в PHP предусмотрен оператор instanceof.
Работает он с двумя операндами: объектом, который нужно проверить (указывается слева от ключевого слова instanceof), и именем класса или интерфейса справа.
Оператор возвращает значение true, если объект является экземпляром класса указанного типа.
Получение информации о методах
Иногда бывает нужно получить список всех методов класса. Для этого нужно воспользоваться функцией get_class_methods(). В качестве аргумента ей передается имя класса, а она возвращает массив, содержащий имена всех методов класса.
Предполагая, что класс CdProduct существует, получим такой результат.
Все очень просто – мы передаем функции имя класса и распечатываем полученный массив с помощью функции print_r().
C таким же успехом мы могли бы передать функции get_class_methods() не только класс, но и конкретный объект.
Как мы знаем, можно сохранить имя объекта в строковой переменной и вызвать его динамически вместе с объектом следующим образом.
Всё вроде бы неплохо, однако такой подход таит в себе определенную опасность. Что произойдет, если метода не существует? Очевидно, сценарий завершится ошибкой. У нас уже есть опыт проверки того, существует ли метод.
Прежде, чем вызвать метод, мы проверяем, есть ли его имя в массиве, возвращенном функцией get_class_methods(). Неплохое решение, однако в PHP для этой цели уже изобретен другой "велосипед")
Имена методов можно проверить с помощью двух функций: is_callable() и method_exists(). Из этих двух вариантов is_callable() – более сложная.
В качестве первого аргумента ей передается строковая переменная, определяющая имя функции. Если заданная функция существует и ее можно вызвать, функция is_callable() возвращает значение true.
Чтобы применить такую же проверку к методу, вместо имени функции нужно передать ей массив, который должен содержать ссылку на объект или имя класса в качестве первого элемента и имя метода для проверки – в качестве второго.
Функция вернет значение true, если указанный метод существует в классе.
У функции is_callable() также есть второй необязательный аргумент – булево значение. Если установить для него значение true, то функция будет проверять только синтаксис функции или метода, имя которого задано, а не его реальное существование.
Функции method_exists() передается ссылка на объект (или имя класса) и имя метода, а она возвращает значение true, если заданный метод существует в классе объекта.
Важно!
То, что метод существует, еще не означает, что его можно вызвать. функция method_exists() возвращает значение true для всех методов: закрытых (private), защищенных (protected) и, конечно же, общедоступных (public).
Получение информации о свойствах
Точно так же, как можно запросить список методов класса, можно запросить и список его свойств. Функции get_class_vars() передается имя класса, а она возвращает ассоциативный массив.
Имена свойств сохраняются в виде ключей этого массива, а значения свойств – в виде значений.
Давайте выполним проверку объекта CdProduct. Для наглядности добавим к классу общедоступное свойство: CdProduct::$coverUrl.
В результате вызова
будет показано только общедоступное свойство.
Получение информации о наследовании
С помощью функций для работы с классами можно также выявлять отношения наследования.
Например, с помощью функции get_parent_class() можно узнать имя родительского класса для указанного класса.
Этой функции передается ссылка на объект или имя класса, а она возвращает имя родительского класса (суперкласса), если таковой существует. Если же такого класса нет, то функция вернет значение false. В результате вызова
мы получим имя родительского класса ShopProduct, как и можно было ожидать.
С помощью функции is_subclass_of() можно также проверить, является ли класс дочерним для другого класса.
Этой функции передается ссылка на дочерний объект и имя родительского класса. Функция возвращает значение true, если второй класс является суперклассом первого аргумента.
Функция is_subclass_of() сообщит информацию только об отношениях наследования в классе, однако не поможет нам узнать, реализует ли класс интерфейс – для этой цели следует использовать оператор instanceof.
Кроме того, можно воспользоваться функцией call_implements(), которая является частью SPL (Standard PHP Library). Этой функции передается имя класса или ссылка на объект, а она возвращает массив имен интерфейсов.
Ну вот мы и разобрались с тем, как получать информацию об объекте или классе, методах, свойствах и наследовании. Увидимся в новых материалах.
Понравился материал и хотите отблагодарить?
Просто поделитесь с друзьями и коллегами!