【问题标题】:Do class properties get overwritten on extended classes?类属性会在扩展类上被覆盖吗?
【发布时间】:2017-08-27 19:44:54
【问题描述】:

比如说我有两个班级AB

答:

class A {
    private $name = "Joe";
}

乙:

class B extends A {
       private $name = "Scotto";
}

$name 的值是多少?它会覆盖父类属性还是如果实例化它会在实例上?任何帮助都会很棒,谢谢!

【问题讨论】:

  • @naththedeveloper 我可以轻松尝试,但我正在寻找更深入的答案,而不仅仅是“哇,这就是它的作用”
  • 为什么要换掉?私有意味着只有这个类可以访问这个属性。因此,每个类都有自己的$name 定义。 Clicky
  • 但是,当$name 定义为protectedpublic 时,它确实会被Scotto 替换。我建议阅读the documentation 的可见性。它在示例代码中声明,We can redeclare the public and protected properties, but not private

标签: php class oop properties


【解决方案1】:

我建议专门阅读文档页面上的this comment。重点是方法,属性也是一样

...私有方法仅对定义它们的类可见,子类看不到父类的私有方法。如果孩子看不到父母的私有方法,孩子就不能覆盖它们。

你的例子:

class A {
  private $name = "Joe";

  public function getName() {
    return $this->name;
  }
}

class B extends A {
  private $name = "Scotto";
}

class C extends A {
  private $name = "Scotto";

  public function getName() {
    return $this->name;
  }
}

$a = new A;
$b = new B;
$c = new C;

$a->getName(); // 'Joe'
$b->getName(); // 'Joe'
$c->getName(); // 'Scotto'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-23
    • 2020-02-05
    • 2014-04-30
    • 2017-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多