【发布时间】:2010-06-21 01:22:45
【问题描述】:
最近在我正在做的一个项目中,我需要将回调存储在静态成员数组中,如下所示:
class Example {
private static $_callbacks = array(
'foo'=>array('Example','do_foo'),
'bar'=>array('Example','do_bar')
);
private static function do_foo() { }
private static function do_bar() { }
}
为了调用它们,我尝试了明显的(甚至可能是幼稚的)语法(在 Example 类中):
public static function do_callbacks() {
self::$_callbacks['foo']();
self::$_callbacks['bar']();
}
令我惊讶的是,这不起作用,导致通知我正在访问一个未定义的变量,并出现一个致命错误,指出需要调用 self::$_callbacks['foo']。
然后,我尝试了call_user_func:
public static function do_callbacks() {
call_user_func(self::$_callbacks['foo']);
call_user_func(self::$_callbacks['bar']);
}
它成功了!
我的问题是:
为什么我需要使用call_user_func作为中介,而不是直接调用它们?
【问题讨论】: