当原始对象不在范围内时,在上下文中使用ReflectionMethod :: invoke

时间:2009-11-15 18:04:38

标签: php reflection

我正在尝试做这样的事情:

class A {
   public function foo() {
      $b = new B;
      $b->invokeMethodFromAnotherObject(new ReflectionMethod($this, 'bar'));
   }
   public function bar() {

   }
}

class B {
   public function invokeMethodFromAnotherObject(ReflectionMethod $method) {
        $method->invoke(?);
   }
}

但是没有明显的方法可以从反射方法中“吮吸”$ this,而且我没有对相关对象的引用。有没有办法可以做到这一点,而不将$ this传递给B :: invokeMethodFromAnotherObject?

1 个答案:

答案 0 :(得分:1)

反射方法对于对象没有任何线索。即使将$ this传递给“new ReflectionMethod”,结果对象也只存储一个类引用。你想要的实际上是回调中的一个闭包(php 5.3)或好的array($this, 'bar') + call_user_func

class A {
  function foo() {
    $b = new B;
    $that = $this;
    $b->invoke(function() use($that) { $that->bar(); });
 }

 function bar() {
     echo "hi";
 }
}

class B {
 function invoke($func) {
   $func();
 }
}

$a = new A;
$a->foo();