2013-02-03 2 views
2

나는 게임을 만들고 있으며 서버 측에서 캐릭터 능력을 구현하기 위해이 부분에 왔습니다. 그들을 위해속성 및 정의되지 않은 메서드로서의 기능

$abils = array(); 

그리고 클래스 :

class Abil{ 
    private $timing; 
    private $func; 

    public function __construct($time, $func){ 
     global $abils; 
     $this->timing = $time; 
     $this->func = $func; 
     array_push($abils,$this); 
    } 

    public function trigger($time,$params){ 
     if(preg_match('/^'.$this->timing.'$/',$time)) $this->func($params); 
    } 
} 

$time 정규식으로, 능력의 "타이밍"입니다

그래서 나는 모든 캐릭터 능력을 보유 할 배열을 가지고있다. 예를 들어 \d\d-0은 모든 사람이 턴을 시작할 수 있습니다.
$func은 능력을 사용할 때 실행하는 기능입니다. 특정 "타이밍"에 도달

(예를 들어, 누군가의 턴의 시작), 글로벌 triggerAll() 함수는 타이밍의 모든 능력을 실행하는 데 사용되는 :

function triggerAll($time,$params = NULL){ 
    global $abils; 
    foreach($abils as $abil) $abil->trigger($time,$params); 
} 

를하지만, 경우 triggerAll 라고, 치명적인 오류가 생성됩니다
Fatal error: Call to undefined method Abil::func()

나는이 $func이 방법하지만 기능을 보유하고 재산되지 않는 때문입니다 생각한다. 해결 방법은 무엇입니까? call_user_func

call_user_func($this->func,$params); 

대신

$this->func($params); 

답변

1

는 해결 방법을 찾을 수

$f = $this->func; 
$f($params); 

그리고 아마도을 (비록 아마 단지 5.5)

($this->func)($params); 
+0

이것은 또한 효과가 있었을 것이다 :'$ this-> {$ this-> func} ($ params); ' – nickb

+0

@nick : 분명히. 그게 나에게 어떤 의미가 없지. – Eric

+0

@ 에릭 - 분명히? 다시 한번 확인해 보겠습니다. [확실하게 작동합니다] (http://codepad.viper-7.com/iIZyei). – nickb

0

나는 이것이 작동합니다 의심 :