ReflectionMethod::getClosure()
(PHP 5 >= 5.4.0, PHP 7)
返回一个动态建立的方法调用接口,译者注:可以使用这个返回值直接调用非公开方法。
说明
public ReflectionMethod::getClosure(object $object) :Closure
Warning本函数还未编写文档,仅有参数列表。
参数
- $object
不可以使用静态方法,需要其他类型的方法
返回值
返回Closure如果产生任何错误返回NULL
You can call private methods with getClosure(): <?php function call_private_method($object, $method, $args = array()) { $reflection = new ReflectionClass(get_class($object)); $closure = $reflection->getMethod($method)->getClosure($object); return call_user_func_array($closure, $args); } class Example { private $x = 1, $y = 10; private function sum() { print $this->x + $this->y; } } call_private_method(new Example(), 'sum'); ?> Output is 11.
Use method from another class context. <?php class A { private $var = 'class A'; public function getVar() { return $this->var; } public function getCl() { return function () { $this->getVar(); }; } } class B { private $var = 'class B'; } $a = new A(); $b = new B(); print $a->getVar() . PHP_EOL; $reflection = new ReflectionClass(get_class($a)); $closure = $reflection->getMethod('getVar')->getClosure($a); $get_var_b = $closure->bindTo($b, $b); print $get_var_b() . PHP_EOL; // Output: // class A // class B