我正在尝试做这样的事情:
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?
答案 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();