2009-09-02 3 views
3

URL을 가져 와서 요청 된 구성 요소, 동작 및 모든 값을 찾기 위해 폭발하는 라우터라는 PHP 클래스가 있습니다. 그런 다음 책임 클래스를로드하고 작업 등을 실행합니다. 이제 사용자 클래스를 통해 클래스에 사용자 액세스를 통합합니다.변수를 통한 클래스 정적 함수 액세스

각 구성 요소 (클래스)에 대해 각 동작을 인덱스로 유지하고 동작을 실행하는 데 필요한 최소 권한으로 숫자를 나타내는 'perms'라는 정적 클래스 배열 변수가 있습니다. 각 구성 요소에는 전달 된 액션 이름에 대한 권한 값을 가져 오는 정적 함수도 있습니다.

내가 겪고있는 문제는 변수에 저장된 클래스의 이름으로 올바르게 작동하는 정적 함수를 얻는 것입니다. 라우터에서는 구성 요소의 이름을 저장하는 변수를 사용합니다.

$this->controller // cms, calendar ,etc 

내가 정적 기능

을 액세스하는 데 사용하려고 할 때 그때, 나는 오류를 얻고있다

$class = $this->controller.'Controller'; // cmsController, calendarController, etc 

그러나 클래스의 이름을 얻기 위해 그것을 '컨트롤러'추가

$minActionPerm = $class::getPerms($this->action); // No go, parse error 

글자 그대로 클래스 이름을 입력 할 때 오류가 발생하지 않지만 이는 실제 해결책이 아닙니다.

$minActionPerm = cmsController::getPerms($this->action); // Good, but literal 

변수는 동작을 실행할 클래스 개체를 만들 때도 작동합니다.

$object = new $class(); 

아마도 변수 사용과 같은 단순한 답변 일 것이라고 확신하지만, 지금 당장은 모르겠습니다.

답변

5

call_user_func 기능을 사용해야합니다.

예 :

call_user_func(array($class, 'getPerms'), $this->action); 

당신은 당신이 이런 식으로 할 수도 있습니다 5.2.3+ PHP를 사용하는 경우 :

call_user_func($class . '::getPerms', $this->action); 
관련 문제