假设我有一个带私人调度表的类。
$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
);
我想知道是否有一种方法可以将这些作为私有方法保留在类中,但仍然将它们与分派表一起使用。
答案 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]));