php中类属性被覆盖后,不支持在子类中使用parent:: 调用父类的属性吗

2. 问题描述?

php中类属性被覆盖后,不支持在子类中使用parent:: 调用父类的属性吗

class A{
public  $name=20;
}


class B extends A{
public  $name=25;

public function aaa(){
//这里无法调用
echo parent::$name;
}
}
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

不论是父类的属性还是子类的属性,最终实例化时,只会保留一个,相同的属性会根据「就近原则」覆盖,一个类不会有两个相同的属性。

当你在子类声明 $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();
3个月前 评论
renji566 (楼主) 3个月前
讨论数量: 3

不论是父类的属性还是子类的属性,最终实例化时,只会保留一个,相同的属性会根据「就近原则」覆盖,一个类不会有两个相同的属性。

当你在子类声明 $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();
3个月前 评论
renji566 (楼主) 3个月前

这不是go :joy:

3个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!