说我在这里:
class Foo
{
public function test()
{
// I'm here!
}
private function pow() {}
}
我想声明一个引用方法$this->pow
的局部变量。我试试:
$pow = $this->pow;
这不起作用:
Notice: Undefined property: Foo::$pow
如何在PHP中引用类实例方法?
我需要这个,因为我需要将函数传递给test
内的匿名函数。我无法将$this
传递给匿名函数,因为我使用的是PHP 5.3,而这只能在PHP 5.4中实现。此外,函数pow
不公开,因此我无法将$this
分配给中间变量并将其传递给匿名函数。
答案 0 :(得分:2)
如果pow
与您的示例中的public
相同,那么您只需执行此操作:
$self = $this;
$invokePow = function() use ($self) { $self->pow(); };
// ... some time later ...
$invokePow(); // calls pow()
您也可以将array($this, 'pow')
作为callable传递,并使用call_user_func
调用它。
如果pow
不是public
,那你就是运气不好。
但是,如果你能够升级到5.4那么一切都变得容易了:
$invokePow = function() { $this->pow(); };
您无需显式捕获$this
,和可以从任何上下文(甚至在类外)调用$invokePow
。