php继承相关的一个问题

Code:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class A {
private function foo() {
echo "a";
}
public function test() {
$this->foo();
}
}
class B extends A {
public function foo() {
echo 'b';
}
}
$b = new B();
$b->test(); // a

当子类继承父类之后,this的指向是动态绑定的,也就是说,当父类的方法被重写之后,调用的就是子类的方法,没有重写,就调用父类的方法。

在本文中,父类的foo方法是私有的,并没有继承给子类,也就没有重写之说,所以,根据前面的定论,没有重写就调用父类中的方法。所以就打印了’a’。

另外还有三种绑定方式,分别是 self parent static

self是静态绑定,它的指向始终是在编译时所在的那个类。parnet也是静态绑定,它始终指向编译时所在类的父类,而这个父类是声明类时就指定了的,所以指向是明确的。static属于后期静态绑定,或者说是动态绑定或运行时绑定,它的指向与调用者有关。若调用者是所在类的实例,那么它就指向本类;若调用者是所在类子类的实例,它则指向子类。

关注作者公众号,获取更多资源!
赏作者一杯咖啡~