2

假设我有一个带有私人调度表的课程。

$this->dispatch = array(
    1 => $this->someFunction,
    2 => $this->anotherFunction
);

如果我再打电话

$this->dispatch[1]();

我收到一个错误,该方法不是字符串。当我把它变成这样的字符串时:

$this->dispatch = array(
    1 => '$this->someFunction'
);

这会产生 致命错误:调用未定义函数 $this->someFunction()

我也尝试过使用:

call_user_func(array(SomeClass,$this->dispatch[1]));

导致消息: call_user_func(SomeClass::$this->someFunction) [function.call-user-func]: 第一个参数应该是一个有效的回调

编辑:我意识到这并没有真正的意义,因为当 $this 是 SomeClass 时它正在调用 SomeClass::$this。我已经尝试了几种方法,数组包含

array($this, $disptach[1])

这仍然没有完成我所需要的。

结束编辑

如果我没有类并且只有一个带有一些功能的调度文件,这将有效。例如,这有效:

$dispatch = array(
    1 => someFunction,
    2 => anotherFunction
);

我想知道是否有一种方法可以让我仍然将这些作为私有方法保留在类中,但仍然可以将它们与调度表一起使用。

4

2 回答 2

9

您可以将方法的名称存储在 dispatch 中,例如:

$this->dispatch = array('somemethod', 'anothermethod');

然后使用:

$method = $this->dispatch[1];
$this->$method();
于 2008-11-20T18:17:14.753 回答
5

call_user_func*-Family 函数应该像这样工作:

$this->dispatch = array('somemethod', 'anothermethod');
...
call_user_func(array($this,$this->dispatch[1]));
于 2008-11-20T18:31:10.547 回答