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();
我期待什么:PHP类范围与call_user_func混乱()
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'));
为什么它输出假?
您不需要在调用“parent :: who1”时添加“父”部分。看看http://php.net/manual/en/language.oop5.inheritance.php:'例如,当你扩展一个类时,这个子类继承了父类的所有公共和受保护的方法。除非一个类重写这些方法,否则它们将保留它们的原始功能。' –
不要使用'parent ::':'call_user_func(array('B','who1'));' – Wrikken