No Image

Php узнать класс объекта

СОДЕРЖАНИЕ
228 просмотров
10 марта 2020

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 и указываем имя класса, объект (экземпляр) которого хотим создать.

Что такое методы? В классическом понимании методы – это функции. Удалить, размножить, распечатать, переслать – все это методы объекта. Некий набор действий, которые можно проделывать с анкетой.

Любимый всеми авторами статей по ООП, пример объекта из реальной жизни – это кот. У кота есть свойства:

Ещё котам присущи методы:

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

Читайте также:  Изменить файл подкачки вин 10

Пример в 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.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

Она выглядит вот так:

  • BB-код ссылки для форумов (например, можете поставить её в подписи):
  • Комментарии ( 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() не только класс, но и конкретный объект.

    Читайте также:  Вывод arraylist на экран java

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

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

    Прежде, чем вызвать метод, мы проверяем, есть ли его имя в массиве, возвращенном функцией 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). Этой функции передается имя класса или ссылка на объект, а она возвращает массив имен интерфейсов.

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

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

    Комментировать
    228 просмотров
    Комментариев нет, будьте первым кто его оставит

    Это интересно
    Adblock
    detector