当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何在PHP中的类中创建调度表?》经验,为你挑选了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]:第一个参数应该是一个有效的回调.

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

array($this, $disptach[1])

这仍然没有达到我的需要.

结束编辑

如果我没有类并且只有一个包含某些函数的调度文件,则此方法有效.例如,这有效:

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

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



1> Allain Lalon..:

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

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

然后使用:

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



2> Waquo..:

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

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

推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有