Получить свойство Protected из объекта

92
17 марта 2021, 20:30

Приходит от апи ответ. Мне нужно получить некоторые значения из него, но свойство xmlData protected и не могу получить доступ к нему. Можно ли как-то решить эту проблему? https://pastebin.com/DxNFREyu

Answer 1

Получить доступ к свойству любого объекта, с любым модификатором доступа, в том числе protected свойствам в PHP можно с помощью рефлексий (Reflection)

Привожу пример из документации PHP:

<?php
class Foo {
    public static $staticProperty = 'foobar';
    public $property = 'barfoo';
    protected $privateProperty = 'foofoo';
}
$reflectionClass = new ReflectionClass('Foo');
var_dump($reflectionClass->getProperty('staticProperty')->getValue());
var_dump($reflectionClass->getProperty('property')->getValue(new Foo));
$reflectionProperty = $reflectionClass->getProperty('privateProperty');
$reflectionProperty->setAccessible(true);
var_dump($reflectionProperty->getValue(new Foo));
?>

Ваш код будет выглядеть примерно так:

$myObject = new \stdClass(); // объект для примера
$reflectionClass = new ReflectionClass(get_class($myObject));
$reflectionProperty = $reflectionClass->getProperty('xmlData');
$reflectionProperty->setAccessible(true);
var_dump($reflectionProperty->getValue($myObject));

Как говорится - если очень хочется, то можно)

Подробнее о Reflection API

READ ALSO
PHP Проблема при работе с классом

PHP Проблема при работе с классом

Создаю класс My_Class, в нем хранится информация об авторизацииЛогины и пароли нужно получать извне и записывать в массив $authorization

129
Сохранить session_id() в cookie на долгое время

Сохранить session_id() в cookie на долгое время

У меня есть простое решение на этот счет

99
Как вывести содержимое папки в json формате?

Как вывести содержимое папки в json формате?

-- У меня есть папка, в ней есть картинкиВытащить с помощью php получается, но получить json-формат почему-то не получается

93
на хостинге не работает авторизация, а на локальном сервере без проблемю

на хостинге не работает авторизация, а на локальном сервере без проблемю

подскажите, почему проверка пароля на локальном сервере (ноутбук (Тип сервера: MariaDB; Версия сервера 103

103