如何在PHP中的类中创建调度表?

时间:2008-11-20 18:08:25

标签: php dispatch-table

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

$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
);

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

2 个答案:

答案 0 :(得分:8)

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

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

然后使用:

$method = $this->dispatch[1];
$this->$method();

答案 1 :(得分:5)

call_user_func * -Family of functions应该像这样工作:

$this->dispatch = array('somemethod', 'anothermethod');
...
call_user_func(array($this,$this->dispatch[1]));