get_class_vars
获取所有公共变量,但我想访问私有变量。
我是从父类做的,试图让子类变量......
class A
{
function getvars()
{
/* get private vars from child */
}
}
class B extends A
{
private $name;
}
还有另一种方法可以做到这一点吗?
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 方法上的过滤器或完全省略它(这里我只显示了私有过滤器)。
使用 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();
如果需要,将其声明为受保护,这样您就可以直接访问父类和扩展类中的属性。
另一种方法是在引入此属性的类中定义受保护/公共 getter/setter 函数。
最难的是在父类中使用ReflectionObject
on$this
来获取私有属性列表并更改它们的可访问性