class A
{
public static function who1()
{
var_dump(get_called_class());
}
}
class B extends A
{
public static function who2()
{
parent::who1();
}
}
call_user_func(array('B', 'parent::who1'));
B::who2();
我的期望:
string 'B' (length=1)
string 'B' (length=1)
实际回报:
boolean false
string 'B' (length=1)
有谁能告诉我为什么输出与我的预期不同?
另见:
http://us1.php.net/manual/en/language.types.callable.php
http://us1.php.net/manual/en/function.get-called-class.php
修改 也许我的旧代码不清楚,这是新的例子:
class A
{
public static function who()
{
var_dump(get_called_class());
}
}
class B extends A
{
public static function who()
{
echo 'hehe';
}
}
call_user_func(array('B', 'parent::who'));
为什么输出错误?
答案 0 :(得分:2)
来自PHP manual documentation for Object Inheritance:
例如,当您扩展类时,子类从父类继承所有公共和受保护的方法。除非某个类重写这些方法,否则它们将保留其原始功能。
如上所述,call_user_func()
中不需要parent
前缀:
call_user_func(array('B', 'who'));
var_dump()
中有FALSE
因为call_user_func()
在课堂外声明了方法调用。所以get_called_class()
表现得如预期的那样(或在手册中提到):
如果从类外部调用,则返回FALSE。