Php как вывести объект
Перейти к содержимому

Php как вывести объект

  • автор:

Работа со свойствами объектов на PHP

Сейчас мы с вами научимся работать с объектами и их свойствами на более практическом примере. Давайте сделаем класс User , который будет описывать юзера нашего сайта. Пусть у нашего пользователя будет два свойства: имя и возраст. Напишем код нашего класса:

Пока наш класс ничего не делает — он просто описывает, что будут иметь объекты этого класса (в нашем случае каждый объект будет иметь имя и возраст). По сути, пока мы не создадим хотя бы один объект нашего класса — ничего полезного не произойдет.

Давайте создадим объект нашего класса. При этом нужно иметь ввиду, что классы принято называть большими буквами, а объекты этих классов — маленькими:

// Создаем объект нашего класса: $user = new User; ?>

Давайте теперь что-нибудь запишем в свойства нашего объекта, а потом выведем эти данные на экран:

$user = new User; // создаем объект нашего класса $user->name = ‘john’; // записываем имя в свойство name $user->age = 25; // записываем возраст в свойство age echo $user->name; // выводим записанное имя echo $user->age; // выводим записанный возраст ?>

Как вы уже поняли — в свойства объекта можно что-то записывать и из свойств можно выводить их содержимое. Давайте теперь сделаем 2 объекта-юзера: ‘john’ и ‘eric’ , заполним их данными и выведем на экран сумму их возрастов:

// Первый объект $user1 = new User; // создаем первый объект $user1->name = ‘john’; // записываем имя $user1->age = 25; // записываем возраст // Второй объект $user2 = new User; // создаем второй объект $user2->name = ‘eric’; // записываем имя $user2->age = 30; // записываем возраст // Найдем сумму возрастов: echo $user1->age + $user2->age; // выведет 55 ?>

Сделайте класс Employee (работник), в котором будут следующие свойства — name (имя), age (возраст), salary (зарплата).

Создайте объект класса Employee , затем установите его свойства в следующие значения — имя ‘john’ , возраст 25 , зарплата 1000 .

Создайте второй объект класса Employee , установите его свойства в следующие значения — имя ‘eric’ , возраст 26 , зарплата 2000 .

Выведите на экран сумму зарплат созданных юзеров.

Выведите на экран сумму возрастов созданных юзеров.

Способы просмотра свойств и методов нужного класса/объекта.

Если у вас есть экземпляр класса (объект), то проще всего именно его и передать в функцию. Так дополнительно получим информацию по его свойствам.

Попробуем получить информацию в контексте объекта:

InfoEssence($objMyClass); //информация по объекту
Свойства объекта- экземпляра класса MyClass: Array ( [age] => 30 ) Свойства класса MyClass: Array ( [age] => 21 [name] => Serj ) Методы класса MyClass: Array ( [0] => getAge [1] => setAge )

Если объект не создавался или же нет к нему доступа — получаем информацию в контексте класса, для чего передаем его название:

InfoEssence('MyClass'); //информация по классу // или InfoEssence(MyClass::class);
Свойства класса MyClass: Array ( [age] => 21 [name] => Serj ) Методы класса MyClass: Array ( [0] => getAge [1] => setAge )

Эту функцию можно так же использовать для получения информации изнутри любого другого класса.
Для этого:
1. функцию InfoEssence() сделать методом данного класса (разместить ее среди других методов);

2. для запуска — добавить в любой исполняемый метод:
— если интересует текущий класс(объект)

$this->InfoEssence(self::class); //класс
$this->InfoEssence($this); //объект

— если интересует другой класс(объект), например «Post»
$this->InfoEssence(\common\models\Post::class); //класс
$this->InfoEssence($obj); //$obj- содержит интересующий объект

Reflection API.

С помощью классов, которые содержит Reflection API, можно сделать очень многое, не только вывести на экран информацию про свойства и методы класса/объекта. Не требует установки т.к. является частью ядра PHP. Включен с 5-й версии.

Reflection Содержит статический метод export(), предоставляющий итоговую информацию о классе
ReflectionClass Позволяет получить информацию о классе и содержит средства для работы с ним
ReflectionMethod Позволяет получить информацию о методах класса и содержит средства для работы с ними
ReflectionParameter Позволяет получить информацию об аргументах метода
ReflectionProperty Позволяет получить информацию о свойствах класса
ReflectionFunction Позволяет получить информацию о функциях и содержит средства для работы с ними
ReflectionExtension Позволяет получить информацию о расширениях PHP
ReflectionException Предназначен для обработки ошибок

Советую изучить все возможности самостоятельно тут.

Остановимся только на некоторых моментах. У ReflectionClass есть статичный метод export (), который выводит на экран много полезной информации по переданному ему классу. Немного похоже на то, что делает вышеописанная функция, но выводит не только публичные, а все свойства и методы!

Выведем информацию по вышеописанному классу:

echo '
'; ReflectionClass::export('MyClass'); echo '

';

в качестве параметра, методу export () передаем название класса или переменную содержащую нужный объект.

Class [ class MyClass ] < @@ W:\domains\test.loc\index.php 14-19 - Constants [0] < >- Static properties [1] < Property [ public static $name ] >- Static methods [0] < >- Properties [1] < Property [ public $age ] > - Methods [2] < Method [ public method getAge ] < @@ W:\domains\test.loc\index.php 17 - 17 >Method [ public method setAge ] < @@ W:\domains\test.loc\index.php 18 - 18 >> >

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

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

$rc = new ReflectionClass ('MyClass'); //или $obj echo $rc->getFileName(); //W:\domains\test.loc\index.php

Автор: Сергей Дата публикации: 19.03.2017

  • Пример простого REST API на PHP.
  • Использование YouTube Data API для своего WEB-сервиса. Выборка нужных видеозаписей, получение информации.
  • Определение страны и города посетителя по его IP. Расширение GeoIP.
  • Установка, настройка и базовое использование фреймворка для тестирования «Codeception».
  • Основы PHPUnit — 1 часть.

Вывод значения из свойств объекта. Только при просмотре объекта через print_r

Cтрелочка используется потому, что вы обращаетесь к свойству «price» объекта, который находится на первом месте в массиве $object, и имеющего индекс 0, а не к элементу массива по индексу. Если вы хотите обращаться к свойствам объекта как к индексам массива. вам необходимо реализовать интерфейс ArrayAccess.

Отслеживать
ответ дан 11 сен 2013 в 10:10
3,799 18 18 серебряных знаков 28 28 бронзовых знаков
Объяснили бы товарищу, почему же тут стрелочка, а не индекс.
11 сен 2013 в 10:12
о! черт возьми, не знал, и не на гуглил. Спасибо огромное
11 сен 2013 в 10:13
@lampa, объяснил)
12 сен 2013 в 2:42

    Важное на Мете
Похожие

Подписаться на ленту

Лента вопроса

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.1.26.3951

Php как вывести объект

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

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

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

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

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

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

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

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

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

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

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

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

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

Бесплатный тренинг «PHP для Создания Сайтов: Введение»

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

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

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

—> Бесплатный курс «Сайт-Визитка За 15 уроков»

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

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

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

—> Бесплатный курс «Основы HTML и CSS»

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

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

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

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

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

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

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

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

Бесплатный курс «Основы работы с JavaScript»

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

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

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

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

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

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

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

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

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

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

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

function 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' ) );

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

Array ( [coverUrl] => )

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

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

Например, с помощью функции 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 )) )

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

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

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

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *