为了账号安全,请及时绑定邮箱和手机立即绑定

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

第一个问题:

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

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

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

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

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

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

第二个问题:

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


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

正在回答

2 回答

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

0 回复 有任何疑惑可以回复我~

感觉应该不一样

0 回复 有任何疑惑可以回复我~
#1

慕无忌0429193

http://zhidao.baidu.com/link?url=0HU9fPOubHlxOVQpbddf6GnAziWNwluKULBl7tzqtMUyl7q-k4OsZjIGnMM1cDjqzHz__moRFvhWWMrWjCgZm_
2016-03-22 回复 有任何疑惑可以回复我~
#2

dayu_ 提问者 回复 慕无忌0429193

有点绕,我使用()来分割区域。 我指的不是(继承加实例化后)的对象数据是不是使用同一个引用,子类和父类实例化两个对象当然不会是一个。我指的是继承后,(子类继承的结构)是否和(不继承而新创建一样的数据类型)在内存中存储的方式是一样的,第一个问题我就是倾向于相同,不是实例化相同,是模型相同。
2016-03-22 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
PHP面向对象编程
  • 参与学习       70153    人
  • 解答问题       361    个

从容应对面试官的知识宝典,带你握面向对象的最重要的核心能力

进入课程

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信