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是能力的“时机”,如 RegEx。例如,\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不是一个 METHOD 而是一个拥有函数的 PROPERTY。任何解决方法?

4

2 回答 2

1

找到了解决方法:call_user_func

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

代替

$this->func($params);
于 2013-02-03T20:15:44.090 回答
0

我怀疑这会起作用:

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

也许(虽然可能只在 5.5 中)

($this->func)($params);
于 2013-02-03T20:21:08.813 回答