Обращение к свойству объекта в php
Или только foreach использовать? В объекте возвращается всегда 1 свойство. В некоторых объектах свойства называются просто $ .
Отслеживать
1,448 6 6 серебряных знаков 13 13 бронзовых знаков
задан 13 мар 2019 в 7:13
1,963 2 2 золотых знака 30 30 серебряных знаков 67 67 бронзовых знаков
$object->property
13 мар 2019 в 7:16
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
$data = ""; $obj = json_decode($data); print_r($obj); echo $obj->; echo $obj->; // $obj->
Отслеживать
ответ дан 13 мар 2019 в 7:21
29.2k 1 1 золотой знак 21 21 серебряный знак 43 43 бронзовых знака
Чтобы обратиться к синтаксически некорректному имени свойства можно воспользоваться специальным синтаксисом:
$obj = (object) ['$property' => 1]; echo $obj->;
Строка имени свойства может быть любой, лишь бы была записана как корректный строковой литерал
Отслеживать
ответ дан 13 мар 2019 в 7:21
21.5k 3 3 золотых знака 27 27 серебряных знаков 53 53 бронзовых знака
-
Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.1.8.3130
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Переменные названия свойств объектов в PHP
На примере этого класса мы сейчас разберем то, что названия свойств можно хранить в переменной.
К примеру, пусть у нас есть переменная $prop , в которой лежит строка ‘name’ . Тогда обращение $user->$prop по сути эквивалентно обращению $user->name . Такое хитрое обращения к свойствам класса используется редко, но иногда бывает полезно.
Посмотрим на примере:
$prop; // выведет ‘john’ ?>?php>
Сделайте класс City , в котором будут следующие свойства — name , foundation ( дата основания ), population ( население ). Создайте объект этого класса.
Пусть дана переменная $props , в которой хранится массив названий свойств класса City . Переберите этот массив циклом foreach и выведите на экран значения соответствующих свойств.
Массив свойств
Пусть теперь дан вот такой класс User :
surname = $surname; $this->name = $name; $this->patronymic = $patronymic; > > ?>?php>
И пусть дан массив свойств
Попробуем теперь вывести значение свойства, которое хранится в нулевом элементе массива, то есть в $props[0] . Просто так, однако, это не будет работать:
$props[0]; // так работать не будет ?>?php>
Для того, чтобы такое сложное имя свойства заработало, его нужно взять в фигурные скобки, вот так:
; // выведет ‘Иванов’ ?>?php>
Скопируйте мой код класса User и массив $props . В моем примере на экран выводится фамилия юзера. Выведите еще и имя, и отчество.
Ассоциативный массив
Массив, кстати, может быть и ассоциативным:
‘surname’, ‘prop2’ => ‘name’, ‘prop3’ => ‘patronymic’]; echo $user->; // выведет ‘Иванов’ ?>?php>
Имя свойства из функции
Имя свойства также может быть из функции:
$user = new User(‘Иванов’, ‘Иван’, ‘Иванович’); echo $user->; // выведет ‘Иванов’ ?>?php>
Имя свойства из свойства другого объекта
Имя свойства может быть даже свойством другого объекта.
Проиллюстрируем кодом. Пусть для примера дан объект Prop , который в свойстве value будет содержать название свойства объекта User :
value = $value; > > ?>?php>
Давайте выведем фамилию юзера с помощью объекта Prop :
value>; // выведет ‘Иванов’ ?>?php>
Имя свойства из метода другого объекта
Имя свойства также может браться из метода другого объекта:
value = $value; > public function getValue() < return $this->value; > > ?>?php>
Давайте выведем фамилию юзера:
get_mangled_object_vars
Возвращает массив ( array ), в элементах которого свойства (переменные-члены) этого объекта. Ключами будут имена переменных-членов, с некоторыми примечательными исключениями: к закрытым полям класса (private) спереди будет дописано имя класса; к защищённым полям класса (protected) спереди будет добавлен символ * . Эти добавленные значения с обеих сторон также имеют NUL байты. Неинициализированные типизированные свойства автоматически отбрасываются.
Список параметров
Возвращаемые значения
Возвращает массив ( array ), содержащий все свойства объекта object , независимо от области видимости.
Примеры
Пример #1 Пример использования get_mangled_object_vars()
class A
public $public = 1 ;
protected $protected = 2 ;
private $private = 3 ;
>
class B extends A
private $private = 4 ;
>
$object = new B ;
$object -> dynamic = 5 ;
$object -> < '6' >= 6 ;
var_dump ( get_mangled_object_vars ( $object ));
class AO extends ArrayObject
private $private = 1 ;
>
$arrayObject = new AO ([ ‘x’ => ‘y’ ]);
$arrayObject -> dynamic = 2 ;
var_dump ( get_mangled_object_vars ( $arrayObject ));
Результат выполнения этого примера:
array(6) < ["Bprivate"]=>int(4) ["public"]=> int(1) ["*protected"]=> int(2) ["Aprivate"]=> int(3) ["dynamic"]=> int(5) [6]=> int(6) > array(2) < ["AOprivate"]=>int(1) ["dynamic"]=> int(2) >
Смотрите также
- get_class_vars() — Возвращает объявленные по умолчанию свойства класса
- get_object_vars() — Возвращает свойства указанного объекта
User Contributed Notes
There are no user contributed notes for this page.
- Функции работы с классами и объектами
- class_alias
- class_exists
- enum_exists
- get_called_class
- get_class_methods
- get_class_vars
- get_class
- get_declared_classes
- get_declared_interfaces
- get_declared_traits
- get_mangled_object_vars
- get_object_vars
- get_parent_class
- interface_exists
- is_a
- is_subclass_of
- method_exists
- property_exists
- trait_exists
- __autoload
- Copyright © 2001-2024 The PHP Group
- My PHP.net
- Contact
- Other PHP.net sites
- Privacy policy
Обращение к свойству объекта/класса в PHP, если имя св-ва хранится в переменной
Из разряда «на заметку программисту». Есть такие вещи, о которых знаешь что они есть, но забываешь конкретную реализацию, когда доходит до использования. Именно так обстоит дело с тем, что описано в заголовке. Т.е. у нас есть переменная, где хранится имя свойства объекта, и нужно прочитать значение этого свойства. А возникает ситуация, когда нам нужно предварительно вычислить это имя свойства объекта, а потом уже к нему обратиться.
Первый вариант
Можно экземпляр объекта/класса обратить в массив и обращаться к его свойствам как элементам массива.