所以我正在探索使用Reflection类。我注意到了一些事情。 必须先设置我的属性的可访问性,然后才能在Origin类中使用属性 Even 的值或名称。
我想知道的是,可以通过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>';
}
浴室:脏了
个人:总统对话:****************
等:ify
有没有办法从ReflectionClass的对象中获取($ect
)类型的属性?这些房产的官方名称是什么?
答案 0 :(得分:3)
ReflectionClass :: getProperties()仅获取由类显式定义的属性。要反映您在对象上设置的所有属性(包括动态属性),请使用从ReflectionClass继承的ReflectionObject并在运行时实例上运行:
$reflect = new ReflectionObject($this);