Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP类作用域与call\u user\u func()混淆_Php_Class_Scope - Fatal编程技术网

PHP类作用域与call\u user\u func()混淆

PHP类作用域与call\u user\u func()混淆,php,class,scope,Php,Class,Scope,我所期望的是: 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();

我所期望的是:

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)
为什么输出为false?

来自:

例如,当您扩展一个类时,子类会从父类继承所有公共和受保护的方法。除非类重写这些方法,否则它们将保留其原始功能

如上所述,在以下情况下不需要
父项
前缀:


您在中得到了
FALSE
,因为声明的方法调用在类之外。如预期(或手册中所述):

如果从类外部调用,则返回FALSE


您不需要在对
parent::who1
的调用中添加
parent
部分。看看:
例如,当您扩展一个类时,子类从父类继承所有公共和受保护的方法。除非类重写这些方法,否则它们将保留其原始功能。
不要使用
parent::
调用用户函数(数组('B','who1')我不明白。get_called_class()仍然在方法who()中,who()在类A中;它将输出一个@nut
get_called_class()
,在这种情况下可能无法正确确定调用方类。对我来说,这似乎是一个错误。看起来像
call_user_func(数组('B','parent::who')强制
::who()
在类作用域之外被调用。是的,我的示例看起来很复杂,我将把它发布在bug列表中以获得详细信息。谢谢你提到对象继承
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'));
call_user_func(array('B', 'who'));