Php magic方法上的后期静态绑定失败

Php magic方法上的后期静态绑定失败,php,Php,输出 字符串“parents”(长度=7) 字符串“child”(长度=5) 字符串“child”(长度=5) 字符串“child”(长度=5) 预期产出 字符串“parents”(长度=7) 字符串“parents”(长度=5) 字符串“child”(长度=5) 字符串“child”(长度=5) 似乎后期静态绑定在从parrent类调用magic方法时失败了,或者我错过了什么 谢谢:这完全是设计的。 parent::call()调用parent::call()。发件人: 更准确地说,后期静

输出
字符串“parents”(长度=7)
字符串“child”(长度=5)
字符串“child”(长度=5)
字符串“child”(长度=5)

预期产出
字符串“parents”(长度=7)
字符串“parents”(长度=5)
字符串“child”(长度=5)
字符串“child”(长度=5)

似乎后期静态绑定在从parrent类调用magic方法时失败了,或者我错过了什么


谢谢:这完全是设计的。

parent::call()
调用
parent::call()
。发件人:

更准确地说,后期静态绑定通过存储上次“非转发调用”中命名的类来工作。。对于静态方法调用,这是显式命名的类(通常是
运算符左侧的类);对于非静态方法调用,它是对象的类一个“转发调用”是一个静态调用,由
self:
父级:
静态:
,或者,如果在类层次结构中向上,则由
转发静态调用()

您的调用使用了
parent::
,因此无法在此处“使用”后期静态绑定


$this->call()
是在这种情况下实现多态性的正确方法。

我可能在这里遗漏了一些东西,但是“什么是后期静态绑定”?由于父级没有方法
call
,我想说
父级::call()
的结果没有明确定义。在这种情况下,它似乎触发了
child::\u首先调用
。是的,我想我误解了“what late static binding”,我假设关键字“parent”总是调用父类方法。是的,我想我误解了“what late static binding”,我正在做一些测试,如果有人有同样的问题,简单地说,如果您想从父级访问\uuu调用,而在子级中被覆盖,则只需使用父级::\uu调用:D
class parents {

public function __call( $name , $arguments )    {
    var_dump( __CLASS__ );
}

public function test () {
    var_dump( __CLASS__ );
}
}



class child extends parents{

public function __call( $name , $arguments )    {
    var_dump( __CLASS__ );
}

public function test () {
    var_dump( __CLASS__ );
}

public function lateStaticTest ()   {
    parent::test();
    parent::call();

    $this->test();
    $this->call();
}

}


$child = new child();
$child->lateStaticTest();