私はゲームを作っており、サーバー側でキャラクター能力を実装する部分に来ました。
だから私はすべてのキャラクターの能力を保持するための配列を持っています:
$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
、メソッドではなく、機能を保持するプロパティによるものだと思います。回避策はありますか?