get_class_vars
获取所有公共变量,但我想访问私有变量。
我是从父类做的,试图获得子类变量...
class A
{
function getvars()
{
/* get private vars from child */
}
}
class B extends A
{
private $name;
}
还有其他方法吗?
答案 0 :(得分:5)
我建议使用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方法上的过滤器或完全省略它(此处我已将过滤器仅显示为私有)。
答案 1 :(得分:3)
使用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();
答案 2 :(得分:1)
如果需要,请将其声明为受保护,这样您就可以直接访问父级和扩展类中的属性。
其他方法是在类中引入此属性来定义protected / public getter / setter函数。
最难的是在父类的$this
上使用ReflectionObject
获取私有属性列表并change their accessibility