如何为变量分配类实例方法?

时间:2013-04-29 10:27:15

标签: php php-5.3

说我在这里:

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分配给中间变量并将其传递给匿名函数。

1 个答案:

答案 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