Перейти к содержимому

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 .

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

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

Вывод значения из свойств объекта. Только при просмотре объекта через 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.3.2953

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

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

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

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

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 часть.

Как сделать вывод объектов из массива объектов на PHP?

Доброго времени суток. Я хочу сделать вывод name всех дискорд серверов в которых состоит пользователь с помощью Discord API на PHP. Но когда я пытаюсь вывести имена echo $guildstest->name; То мне выдает ошибку Notice: Trying to get property of non-object in E:\OpenServer\domains\localhost\DSS\guilds.php on line 23 . Я понимаю что это массив, но не понимаю как тогда все это выводить? Через echo $guildstest[‘name’]; тоже пробовал ,выводит Notice: Undefined index: name in E:\OpenServer\domains\localhost\DSS\guilds.php on line 22 .В официальной документации про это нечего не написано. Пожалуйста помогите. Перед тем как задать вопрос я гуглил ,но того что мне подошло не нашел . Если что-то не понятно — пишите попробую более понятно объяснить.
Массив вот :

array(2) < [0]=>object(stdClass)#1 (7) < ["id"]=>string(18) "389086811399520256" ["name"]=> string(29) "Дискорд Ютуберы" ["icon"]=> string(34) "a_5fce721c1032fbcd17d19ea60c86eaff" ["owner"]=> bool(false) ["permissions"]=> int(37045248) ["features"]=> array(14) < [0]=>string(15) "PREVIEW_ENABLED" [1]=> string(9) "COMMUNITY" [2]=> string(22) "WELCOME_SCREEN_ENABLED" [3]=> string(27) "ENABLED_DISCOVERABLE_BEFORE" [4]=> string(8) "COMMERCE" [5]=> string(24) "THREE_DAY_THREAD_ARCHIVE" [6]=> string(32) "MEMBER_VERIFICATION_GATE_ENABLED" [7]=> string(4) "NEWS" [8]=> string(15) "PRIVATE_THREADS" [9]=> string(13) "INVITE_SPLASH" [10]=> string(13) "ANIMATED_ICON" [11]=> string(24) "SEVEN_DAY_THREAD_ARCHIVE" [12]=> string(6) "BANNER" [13]=> string(12) "DISCOVERABLE" > ["permissions_new"]=> string(12) "109558711296" > [1]=> object(stdClass)#2 (7) < ["id"]=>string(18) "855072618180116510" ["name"]=> string(27) "Сервер РЕКЛАМА" ["icon"]=> NULL ["owner"]=> bool(true) ["permissions"]=> int(2147483647) ["features"]=> array(0) < >["permissions_new"]=> string(12) "137438953471" > >
  • Вопрос задан более двух лет назад
  • 742 просмотра

3 комментария

Простой 3 комментария

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

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