【问题标题】:Abstract base class cannot access private members of derived class?抽象基类不能访问派生类的私有成员?
【发布时间】:2014-07-21 13:11:36
【问题描述】:

我有一个抽象类实体。我有一个继承实体类的类人。但是我的类实体无法访问类 Person 的私有成员。我是怎么做到的?

<?php
abstract class Entity
{
    public function view()
    {
        echo $name; //Fatal Error. Can't Access
    }
}
class Person extends Entity
{
    private $name;
}

【问题讨论】:

  • 如果我扩展Entity 与另一个名为Desk 的类没有 有名称吗?
  • 变量名 $name 是动态的。函数 view() 从派生类调用,带有一些参数。这些参数实际上是在派生类中定义的变量。所以这永远不会出错。
  • @RobertRozas:我不想实例化抽象类。
  • 为什么基类已经意识到的私有(为什么是私有?)属性在其他地方声明,抽象类不应该给出规则,例如可以覆盖的属性?

标签: php oop inheritance abstract-class


【解决方案1】:

$nameprivate,因此仅在 Person 类中可用。尝试将其设为protected。然后从Entity 类中,使用static::$name; 访问它

注意static 关键字的使用。这是后期静态绑定的示例。简单来说,就是使用属于派生孩子的值。

请记住,根据您正在建模的对象,将$name 属性放在Entity 中可能更有意义,这样所有其他子类也具有该属性,而不是每次都重新声明它。然后,您可以使用 $this-&gt;name;

在您的子类中访问它

【讨论】:

  • 我为我的课程创建了一个新架构。这个好像不太对。 :)
  • 太棒了。祝你的项目好运。
猜你喜欢
  • 2018-04-19
  • 2017-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-16
  • 2011-07-30
  • 2011-08-16
相关资源
最近更新 更多