Итак, я изучаю использование класса 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? и какое официальное название для этих свойств?
ReflectionClass :: getProperties () получает только свойства, явно определенные классом. Чтобы отразить все свойства, которые вы устанавливаете для объекта, включая динамические свойства, используйте ReflectionObject, который наследуется от ReflectionClass и работает с экземплярами среды выполнения:
$reflect = new ReflectionObject($this);
Других решений пока нет …