【发布时间】:2015-08-16 09:17:51
【问题描述】:
所以我正在探索反射类的使用。我注意到了几件事。 必须先设置我的属性的可访问性,然后才能在 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>';
}
浴室:脏
个人:总裁
转化:****************
ect : 确认
有没有办法从 ReflectionClass 的对象中获取 ($ect) 类型的属性?这些属性的正式名称是什么?
【问题讨论】:
-
ReflectionClass明确反映了类;你想要的是反射对象实例,ReflectionObject是正确的反射器。
标签: php class object properties access-modifiers