Получение свойств времени выполнения с ReflectionClass

Итак, я изучаю использование класса Reflection. Я заметил несколько вещей.
Пришлось установить доступность моей собственности, прежде чем можно было использовать значение или имя собственности Четное из класса Origin.

То, что я хотел бы знать, возможно ли получить свойства, установленные во время выполнения через ReflectionClass, Например

class MyClass
{
public $bathroom = 'Dirty';
protected $individual = 'President';
private $conversation = '****************';

function outputReflectedPublic()
{
$reflection = new ReflectionClass($this);
$props = $reflection->getProperties(ReflectionProperty::IS_PUBLIC);
foreach($props as $prop)
echo $prop->getName() . ' : ' . $prop->getValue($this);
}
}

$obj = new MyClass();
$obj->outputReflectedPublic();//bathroom : Dirty
//now we add a new property
$obj->$ect = 'ify';
$obj->outputReflectedPublic();//bathroom : Dirty  //same as before

Теперь я не слишком удивлен этим.
Я пытался увидеть, находится ли свойство в экземпляре как защищенное / частное / статическое с ReflectionProperty::IS_PRIVATE , ReflectionProperty::IS_PROTECTED а также ReflectionProperty::IS_STATIC

Я также использовал $prop->setAccessible(true) чтобы предотвратить недоступную ошибку.
Я не мог видеть $ect имущество.

Я смог получить $ect свойство через внутреннюю функцию как таковое:

function getAll()
{
foreach($this as $key=>$val)
echo $key . ' : ' . $val . '<br>';
}

ванная комната: грязная

личность: президент

разговор: ****************

ect: ify

Есть ли способ получить это ($ect) типы свойств из объекта из ReflectionClass? и какое официальное название для этих свойств?

0

Решение

ReflectionClass :: getProperties () получает только свойства, явно определенные классом. Чтобы отразить все свойства, которые вы устанавливаете для объекта, включая динамические свойства, используйте ReflectionObject, который наследуется от ReflectionClass и работает с экземплярами среды выполнения:

$reflect = new ReflectionObject($this);
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]