• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • ReflectionMethod::getClosure()

    (PHP 5 >= 5.4.0, PHP 7)

    返回一个动态建立的方法调用接口,译者注:可以使用这个返回值直接调用非公开方法。

    说明

    publicReflectionMethod::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