php反射类如何获取构造方法得到的私有属性

class test{
    private $a=array();
    public function __construct() {
        $this->geta ();
    }
    private function geta(){
        $b [] = 1;
        $b [] = 2;
        
        $this->a = $b;
        // 没有return
    }
}


//反射获取
$ref_class = new ReflectionClass('test');
$geta= $ref_class->newInstance();
$method = $ref_class->getmethod('geta');
$method->setAccessible(true);
$a = $method->invoke($rongyuclass); //空的,因为geta不返回任何值

有这样的一个类,现在里面的私有方法geta没有return出任何数据,但是构造方法那边给私有属性a赋值,我直接用反射去取变量$a的时候得到的只能是空值,如何先执行构造,然后得到赋值后的私有属性a?

阅读 2.1k
2 个回答

$ref = new ReflectionClass('test');
$a = $ref->getProperty('a');
$a->setAccessible(true); //设置属性a的访问权限
var_dump($a->getValue(new test));

class test{
    private $a=array();
    public function __construct() {
        $this->geta ();
    }
    private function geta(){
        $b [] = 1;
        $b [] = 2;
        
        $this->a = $b;
        // 没有return
    }
}

$test = new test;

$closure = function() {
    return $this->a;
};
// rebinds the closure to the $test object
$closure  = $closure->bindTo($test, $test);
print_r($closure());
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题