2013-02-03 16 views
2

我做一個遊戲,並來到部分實現在服務器端角色的能力。功能屬性和未定義的方法

所以我有一個數組來保存所有角色能力:

$abils = array(); 

和A類爲他們:

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不是一個方法,但其擁有的功能屬性。任何解決方法?

回答

1

找到一個解決辦法:call_user_func

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

,而不是

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

這也已經工作:'$本 - > {$這個 - > FUNC}($ params)方法;' – nickb

+0

@nick:當然不是。這對我來說沒有任何意義。 – Eric

+0

@Eric - 當然?那麼,我會再次檢查 - [確切地說,它的工作原理](http://codepad.viper-7.com/iIZyei)。 – nickb

0

我懷疑這會工作:

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

也許(雖然可能僅在5.5)

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