讨论数量:
不论是父类的属性还是子类的属性,最终实例化时,只会保留一个,相同的属性会根据「就近原则」覆盖,一个类不会有两个相同的属性。
当你在子类声明 $name 属性时,父类的 $name 属性就不再生效,如果你不希望你的父类属性被覆盖,可以在声明时将其限定为 private ,然后对外开放一个 access 方法
class A{
private $name=20;
public function getName()
{
return $this->name;
}
}
class B extends A{
public $name=25;
}
$b = new B();
$b->getName(); // 20
不论是否覆盖了父类的属性,都不能使用 parent:: 方法来访问父类的属性,parent:: 只可以用来访问父类的方法。
class A {
public function foo() {
echo "A::foo() called";
}
}
class B extends A {
public function foo() {
echo "B::foo() called";
parent::foo(); // 调用父类的 foo() 方法
}
}
$b = new B();
$b->foo();
关于 LearnKu
不论是父类的属性还是子类的属性,最终实例化时,只会保留一个,相同的属性会根据「就近原则」覆盖,一个类不会有两个相同的属性。
当你在子类声明 $name 属性时,父类的 $name 属性就不再生效,如果你不希望你的父类属性被覆盖,可以在声明时将其限定为
private,然后对外开放一个access方法不论是否覆盖了父类的属性,都不能使用
parent::方法来访问父类的属性,parent::只可以用来访问父类的方法。