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正規表現としての能力の「タイミング」です。たとえば、\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、メソッドではなく、機能を保持するプロパティによるものだと思います。回避策はありますか?

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 に答える