区别只在于forward_static_call不会重置“被调用的类”信息,如果上层类和明确地命名一个类,而call_user_func在这种情况下重置信息(但如果使用父,静态或自身仍然不会重置它) .
例:
class A {
static function bar() { echo get_called_class(), "\n"; }
}
class B extends A {
static function foo() {
parent::bar(); //forwards static info, 'B'
call_user_func('parent::bar'); //forwarding, 'B'
call_user_func('static::bar'); //forwarding, 'B'
call_user_func('A::bar'); //non-forwarding, 'A'
forward_static_call('parent::bar'); //forwarding, 'B'
forward_static_call('A::bar'); //forwarding, 'B'
}
}
B::foo();
请注意,如果向下层次层次结构,forward_static_call拒绝转发:
class A {
static function foo() {
forward_static_call('B::bar'); //non-forwarding, 'B'
}
}
class B extends A {
static function bar() { echo get_called_class(), "\n"; }
}
A::foo();
最后,请注意,forward_static_call只能从类方法中调用.