讨论数量:
不论是父类的属性还是子类的属性,最终实例化时,只会保留一个,相同的属性会根据「就近原则」覆盖,一个类不会有两个相同的属性。
当你在子类声明 $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();
不论是父类的属性还是子类的属性,最终实例化时,只会保留一个,相同的属性会根据「就近原则」覆盖,一个类不会有两个相同的属性。
当你在子类声明 $name 属性时,父类的 $name 属性就不再生效,如果你不希望你的父类属性被覆盖,可以在声明时将其限定为
private
,然后对外开放一个access
方法不论是否覆盖了父类的属性,都不能使用
parent::
方法来访问父类的属性,parent::
只可以用来访问父类的方法。