2013-04-29 93 views
0

说我在这里:如何将一个类实例方法分配给一个变量?

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

你应该尝试[call_user_func](http://php.net/manual/en/function.call-user-func.php) – 2013-04-29 10:33:27

+0

至少在pow()函数中返回一个数字或字符串, :) – Jimbo 2013-04-29 10:34:29

+0

战俘不是你的代码属性,这是一个类方法 – 2013-04-29 10:39:15

回答

2

如果powpublic因为它是在你的榜样,那么你可以简单地这样做:

$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(甚至课外)。

+0

该死的,但感谢您的快速答案。 – Hubro 2013-04-29 10:33:12

+0

+1更好的解释**乔恩**。 – 2013-04-29 10:40:03

相关问题