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

Как обратиться к свойству объекта php

  • автор:

Обращение к свойству объекта в 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’ ?>

Сделайте класс City , в котором будут следующие свойства — name , foundation ( дата основания ), population ( население ). Создайте объект этого класса.

Пусть дана переменная $props , в которой хранится массив названий свойств класса City . Переберите этот массив циклом foreach и выведите на экран значения соответствующих свойств.

Массив свойств

Пусть теперь дан вот такой класс User :

surname = $surname; $this->name = $name; $this->patronymic = $patronymic; > > ?>

И пусть дан массив свойств

Попробуем теперь вывести значение свойства, которое хранится в нулевом элементе массива, то есть в $props[0] . Просто так, однако, это не будет работать:

$props[0]; // так работать не будет ?>

Для того, чтобы такое сложное имя свойства заработало, его нужно взять в фигурные скобки, вот так:

; // выведет ‘Иванов’ ?>

Скопируйте мой код класса User и массив $props . В моем примере на экран выводится фамилия юзера. Выведите еще и имя, и отчество.

Ассоциативный массив

Массив, кстати, может быть и ассоциативным:

‘surname’, ‘prop2’ => ‘name’, ‘prop3’ => ‘patronymic’]; echo $user->; // выведет ‘Иванов’ ?>

Имя свойства из функции

Имя свойства также может быть из функции:

$user = new User(‘Иванов’, ‘Иван’, ‘Иванович’); echo $user->; // выведет ‘Иванов’ ?>

Имя свойства из свойства другого объекта

Имя свойства может быть даже свойством другого объекта.

Проиллюстрируем кодом. Пусть для примера дан объект Prop , который в свойстве value будет содержать название свойства объекта User :

value = $value; > > ?>

Давайте выведем фамилию юзера с помощью объекта Prop :

value>; // выведет ‘Иванов’ ?>

Имя свойства из метода другого объекта

Имя свойства также может браться из метода другого объекта:

value = $value; > public function getValue() < return $this->value; > > ?>

Давайте выведем фамилию юзера:

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, если имя св-ва хранится в переменной

    Из разряда «на заметку программисту». Есть такие вещи, о которых знаешь что они есть, но забываешь конкретную реализацию, когда доходит до использования. Именно так обстоит дело с тем, что описано в заголовке. Т.е. у нас есть переменная, где хранится имя свойства объекта, и нужно прочитать значение этого свойства. А возникает ситуация, когда нам нужно предварительно вычислить это имя свойства объекта, а потом уже к нему обратиться.

    Первый вариант

    Можно экземпляр объекта/класса обратить в массив и обращаться к его свойствам как элементам массива.

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

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