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();