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在同一个名称空间中,否则需要提供完整的名称空间名称(例如
amespace\WPCF7_Mail'
如果没有具有所需参数的私有/受保护的构造函数,则只需使用类和
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开始工作。