2013-04-29 2 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 함수는 public이 아니므로 $this을 매개 변수에 할당하고 익명 함수에 전달할 수 없습니다. 그것은 당신의 예에서와 같이 powpublic 경우

+0

[call_user_func] (http://php.net/manual/en/function.call-user-func.php) –

+0

최소한 pow() 함수에서 숫자 또는 문자열을 반환해야합니다. :) – Jimbo

+0

pow 코드에서 얻을 수있는 속성이 아니며 클래스 메서드입니다 –

답변

2

, 당신은 간단하게이 작업을 수행 할 수 있습니다

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

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

또한 callable으로 주위 array($this, 'pow') 전달하고 call_user_func로를 호출하여 동일한 기능을 수행 할 수 있습니다.

powpublic이 아닌 경우 운이 좋지 않습니다. 당신은 5.4로 업그레이드 할 수있는 경우

그러나, 그것은 모두가 훨씬 쉬워집니다 :

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

당신은 당신도 (어떤 상황에서 $invokePow를 호출 할 수 명시 적으로 $this를 캡처 할 필요가 없습니다 수업 외).

+0

글쎄, 근사하지만 빠른 답변을 주셔서 감사합니다. – Hubro

+0

+1 더 나은 설명 ** Jon **. –

관련 문제