轻松玩转类与对象的内存关系

版权声明:俗世凡人行(释) QQ:748507607 https://blog.csdn.net/weixin_41887155/article/details/86237349

1:   把代码段加载到代码区,进行编译,优化;

2:   执行代码;

2.1:   执行$p = new Person;

2.1.1:  在栈开辟一段内存空间存放变量$p;

2.1.2:   执行new Person,发现是类实例化得到对象,会在堆区开辟内存空间保护对象;

2.2.3:   把类中的属性保存到对象中,会把对象的内存地址赋值给变量;

2.1.4:   在对象的内部有一个隐藏域指向对应的类,连接类与对象的关系;

2.2:   执行$p->getSex();

2.2.1:   在栈中找到是否存在变量$p,存在;

2.2.2:   顺着变量$p所指向的内存地址找到对象;

2.2.3:   执行getSex(),发现调用的是类的对象所指向的方法,顺着对象与类的关系进入到内的内部;

2.2.4:   进入类的内部的第一件事,就是把$this指向对象的地址;

2.2.5:   执行getSex(),在栈区开辟一段空间保存函数;

2.2.6:   执行echo $this->sex,直接读取值;

2.2.7:   函数执行结束,会被操作系统回收;

3:   脚本执行结束,释放栈和代码区的内容;

猜你喜欢

转载自blog.csdn.net/weixin_41887155/article/details/86237349