关于oop:如何从私有函数中获取PHP变量

How to get PHP variable from private function

如何从这个类和私有函数中获取变量$components:

1
2
3
4
5
6
class WPCF7_Mail {
    private function compose() {

        return $components;
    }
}

这是我最好的尝试:

1
2
3
4
5
6
7
8
9
class test extends WPCF7_Mail {
    function compose( $send = true ) {
        global $components;
    }
}

new test();
global $components;
echo $components;

但我一直在得到:

Fatal error: Call to private WPCF7_Mail::__construct() from invalid
context

编辑:我不能修改wpcf7邮件类。所以我不能公开这个函数。


您可以使用ReflectionClass::NewInstanceWithoutConstructor()和Closing::Bind()获取私有属性或调用私有函数。

确保wpcf7-mail在同一个名称空间中,否则需要提供完整的名称空间名称(例如'\Full
amespace\WPCF7_Mail'
)。

如果没有具有所需参数的私有/受保护的构造函数,则只需使用类和Closure::bind()

1
2
3
4
5
6
$class = (new ReflectionClass('WPCF7_Mail'))->newInstanceWithoutConstructor();
$getter = function ($a) {
    return $a->components;
};
$getter = Closure::bind($getter, null, $class);
var_dump($getter($class));

如果需要调用函数,可以这样做:

1
2
3
4
5
6
 $class = (new ReflectionClass('WPCF7_Mail'))->newInstanceWithoutConstructor();
 $getter = function ($a) {
    return $a->compose();
 };
 $getter = Closure::bind($getter, null, $class);
 var_dump($getter($class));

注意,这将从5.4版PHP开始工作。