最佳答案
                
                                    不论是父类的属性还是子类的属性,最终实例化时,只会保留一个,相同的属性会根据「就近原则」覆盖,一个类不会有两个相同的属性。
当你在子类声明 $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 方法
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
                关于 LearnKu
               
                     
                     
                     粤公网安备 44030502004330号
 粤公网安备 44030502004330号 
 
推荐文章: