나는 게임을 만들고 있으며 서버 측에서 캐릭터 능력을 구현하기 위해이 부분에 왔습니다. 그들을 위해속성 및 정의되지 않은 메서드로서의 기능
$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);
이것은 또한 효과가 있었을 것이다 :'$ this-> {$ this-> func} ($ params); ' – nickb
@nick : 분명히. 그게 나에게 어떤 의미가 없지. – Eric
@ 에릭 - 분명히? 다시 한번 확인해 보겠습니다. [확실하게 작동합니다] (http://codepad.viper-7.com/iIZyei). – nickb