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

2. 问题描述?

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

class A{
public  $name=20;
}


class B extends A{
public  $name=25;

public function aaa(){
//这里无法调用
echo parent::$name;
}
}
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 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();
1年前 评论
renji566 (楼主) 1年前
讨论数量: 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();
1年前 评论
renji566 (楼主) 1年前

这不是go :joy:

1年前 评论

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