我正在制作游戏,然后来到服务器端实现角色能力。
所以我有一个数组来保持所有角色的能力:
$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。任何解决方法?
答案 0 :(得分:1)
答案 1 :(得分:0)
我怀疑这会奏效:
$f = $this->func;
$f($params);
也许(虽然可能只在5.5)
($this->func)($params);