get_class_vars
获得所有公共变量,但我想访问私有变量。
我正在做它从一个父类,试图得到子类变量…
class A
{
function getvars()
{
/* get private vars from child */
}
}
class B extends A
{
private $name;
}
是否有其他方法可以做到这一点?
我建议使用PHP的ReflectionClass。特别是getProperties()
呼叫。
下面是PHP文档:
http://www.php.net/manual/en/reflectionclass.getproperties.php示例如下:
class A
{
function getvars()
{
$reflection = new ReflectionClass($this);
$vars = $reflection->getProperties(ReflectionProperty::IS_PRIVATE);
var_dump($vars);
}
}
class B extends A
{
private $name;
}
还要注意,您可以更改getProperties方法上的过滤器,或者完全省略它(这里我只展示了private的过滤器)。
使用ReflectionClass将它们放到数组中。然后你就可以为所欲为了。在屏幕上打印他们的名字的示例代码。
class TestPrivate {
public $var1;
public $var2;
public $var3;
private $var4;
private $var5;
public $var6;
public function getPrivateVars() {
$reflect = new ReflectionClass(__CLASS__);
$vars = $reflect->getProperties(ReflectionProperty::IS_PRIVATE);
foreach ($vars as $privateVar) {
echo $privateVar->getName() . "<br />";
}
}
}
$instance = new TestPrivate();
$instance->getPrivateVars();
如果需要,可以将其声明为protected,这样就可以直接访问父类和扩展类中的属性。
另一种方法是在类中定义protected/public getter/setter函数来引入这个属性。
最难的是在父类的$this
上使用ReflectionObject
来获取私有属性列表并改变它们的可访问性