2012-05-31 3 views
1

에 클래스 메소드 (변수에 저장) 할 것은 예를 들어 클래스입니다 : 그러니까 기본적으로우리 별칭 PHP 여기

public class example 
{ 
    private $foof;   

    public function __construct() 
    { 
      $this->foof = $this->foo; 
    } 

    public function foo($val=0) 
    { 
      // do something... 
    } 
} 

, 샘플 코드의 constructer에서, 그것은에 클래스 메서드를 할당 할 수 있습니다 변수?

궁극적으로 내가 원하는 것은 모든 클래스 메소드가 앨리어스 된 연관 배열을 갖는 것입니다 ... PHP에서 가능합니까? (! 어쨌든 사용한다)

PHP5.3 +에서

답변

5

당신은 단순히 당신의 메소드를 호출하는 익명 함수를 만들 수 있습니다 그러나

$this->foof = function() { 
    $this->foo(1); 
}; 

을, 당신은 $this->foof()를 사용하여 호출 할 수 없습니다 - 당신이 할당해야 그 첫 번째 변수에 : $foof = $this->foof; $foof();


오래된 PHP 버전에서 당신은 쉽게 할 수없는 - create_function()는 클로저를 작성하지 않는 것은 너무 $this가 사용할 수 없습니다.

+0

첫 문장에 대한 자세한 설명, 제발 ... – dave

+2

@ 데이브 http://php.net/call_user_func 예 4 – Corbin

+0

이 변수가 아닌 할당 된 것 후 우리는 클래스 메서드에 매개 변수를 전달할 수 있습니다 익명의 기능으로? – dave

0

익명 기능을 사용할 필요가 없습니다. Callable pseudo type을 사용하면됩니다.

$this->foof = array($this, 'foo'); 
... 
call_user_func($this->foof); 
+0

질문의 요점이 아닙니다. 요점은 클래스 메서드를 변수에 별칭을 지정할 수있게하는 것이 었습니다 ... 그래서 매번 그 변수를 호출하면 클래스 메서드에 대한 참조가됩니다 ... – dave

+0

대답이 맞습니다. 어쩌면 이것은 당신이 원한 것이거나 당신의 이상적인 대답이 아니지만 당신이 요구 한 것 (모호했습니다) 일 것입니다. 그것은 $ f에 저장 한 다음'$ f (55);를 통해 호출하면 똑같이 작동합니다. – goat

+0

나중에 편집 한 후에 말이됩니다. 편집하기 전에 질문에 대답하지 않았습니다. – dave