问答详情
源自:4-2 访问控制-PHP面向对象编程

php中类的继承在内存中的结构与不继承的结构问题

第一个问题:

1.假设有一个父类只有一个 name 属性,使用 public 关键字修饰;又写了个一个空的子类继承自这个父类(不要说继承了就不是空的了)。实例化这个子类。

class Father {
    public $name = 'name';
}
class Child1 extends Father {
}

2.有一个类只有一个 name 属性使用 public 修饰。实例化一个这个类。

class Child2 {
    public $name = 'name';
}

上面两种情况,不从外在形式上区分不同,在内存中的结构是相同的吗(仅从继承来的数据来看比如 $name)?如果不同,能否用通俗的语言解释下?

我试过继承静态属性时,以子类身份修改静态数据后,父子的这部分数据都会发生改变,那么关于静态属性方法是存储一份还是两份(有关联?)

第二个问题:

如果上面的结果是相同,那么是不是可以理解为继承就是将父类的属性方法拿来(public 的和 protected 的),添加到子类中,子类中继承来的属性方法相当于父类中的属性方法复制了一份,其实没有一种必然的联系,就像 =&= 这两种赋值方式的感觉,它是属于 = 这种方式(不考虑复写和静态这些情况,我有点乱说不清,就是只考虑子类没有直接写出的而在父类中写出的那些属性方法,如果你清楚这个可以帮我解答下)。


虽然这个问题在实际开发过程中可能没什么用,但就是想知道,希望谁能帮我解答一下。

提问者:dayu_ 2016-03-19 17:34

个回答

  • 慕无忌0429193
    2016-03-22 21:18:36

    如果不是实例化应该是一样的

  • 慕无忌0429193
    2016-03-22 17:20:45

    感觉应该不一样