0

说我在这里:

class Foo
{
    public function test()
    {
        // I'm here!
    }

    private function pow() {}
}

我想声明一个引用方法的局部变量$this->pow。我尝试:

$pow = $this->pow;

这不起作用:

注意:未定义的属性:Foo::$pow

如何在 PHP 中引用类实例方法?


我需要这个,因为我需要将函数传递给内部的匿名函数test。我无法传递$this给匿名函数,因为我使用的是 PHP 5.3,而这只有在 PHP 5.4 中才有可能。此外,该函数pow不是公共的,因此我无法分配$this给中间变量并将其传递给匿名函数。

4

1 回答 1

2

如果powpublic在您的示例中,那么您可以简单地执行以下操作:

$self = $this;
$invokePow = function() use ($self) { $self->pow(); };

// ... some time later ...
$invokePow(); // calls pow()

您也可以通过array($this, 'pow')作为可调用对象传递并使用call_user_func.

如果pow不是public,那你就完全不走运了。

但是,如果您能够升级到 5.4,那么一切都会变得容易得多:

$invokePow = function() { $this->pow(); };

您不需要$this显式捕获,并且可以$invokePow从任何上下文(甚至在类之外)调用。

于 2013-04-29T10:29:03.217 回答