如何从此类和私有函数中获取变量$ 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类。所以我不能把这个功能公之于众。
答案 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
开始