2013-04-29 125 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

相關問題