如何从私有函数中获取PHP变量

时间:2015-08-09 23:36:12

标签: php oop

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

class WPCF7_Mail {
    private function compose() {

        return $components;
    }
}

这是我最好的尝试:

class test extends WPCF7_Mail {
    function compose( $send = true ) {
        global $components;
    }
}

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

但我一直在接受:

  

致命错误:从无效调用私有WPCF7_Mail :: __ construct()   上下文

编辑:我无法修改WPCF7_Mail类。所以我不能把这个功能公之于众。

1 个答案:

答案 0 :(得分:2)

您可以使用ReflectionClass::newInstanceWithoutConstructor()Closure::bind()获取私人财产或致电私人功能。

确保WPCF7_Mail位于同一个命名空间中,否则您需要提供完整的命名空间名称(例如'\Full\Namespace\WPCF7_Mail')。

如果您没有带有必需参数的私有/受保护构造函数,则只需使用该类和Closure::bind()即可。

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

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

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

请注意,这将从php version 5.4

开始