27岁,山西运城人,职业电商经理人,前端开发工作者,从事过网站建设、网络推广、SEO、SEM、信息流推广、二类电商、网络运维、软件开发,等相关电商工作,经验较为丰富,小米技术社区致力于为广大从事Web前端开发的人员提供一些力所能及的引导和帮助 ...[更多]
E-mail:mzze@163.com
Q Q:32362389
W X:xiaomi168527
27岁,山西运城人,职业电商经理人,网络工程师兼运维,从事过运营商网络建设,企业网络建设、优化。数据中心网络维护等通过,经验丰富,座右铭:当自己休息的时候,别忘了别人还在奔跑。 ...[更多]
大于花一样的年龄,河南郑州是我家,2010年在北京接触团购网,2011年进入天猫淘宝一待就是四年,如今已经将设计走向国际化(ps:误打误撞开始进入阿里巴巴国际站的设计,嘿嘿)五年电商设计,丰富经验,从事过天猫淘宝阿里各项设计,店铺运营,产品拍摄;我将我的经历与您分享是我的快乐!座右铭:越努力越幸运! ...[更多]
E-mail:97157726@qq.com
Q Q:97157726
6个类和对象的概念先知道:
1. 对象的本质是一个复杂的变量
2. 类的本质是一个自定义的复杂数据类型
3. 栈区:运行速度快,体积小,保存基本类型
4. 堆区:运行速度稍慢,体积大,保存复杂类型
5. 实例化的过程就是分配内存空间的过程
6. 对象保存在堆区,将堆区的地址保存到栈区。
类、对象是编译器要去处理的东西。所以内存中没有直接存类和对象,如果每个类存一份的话,太浪费了而且没有必要,编译器把用的类、对象 都是拆成了方法和函数。因为他们的逻辑完全一样,只是对象的字段,和一些参数,不一样而已。
因此每个成员函数都有一个隐含的参数叫this,它用来标识具体的哪一个对象。
内存中存在的是:
成员函数(即跑的代码)存一份。
每个对象的成员变量各自存一份。
静态变量、方法存一份。
所以在计算机里面的具体实现上,还是跟C那样。
对象和属性放在一起(就像结构体一样),在堆区(new)或者栈区(栈变量),当然静态变量的话在静态区;
分析如下代码的结构:
<?php class Student { public $name; public $sex; public function show() { } } $stu1=new Student; $stu2=new Student; $stu1->show();
示意图:
所以说:
代码区:存放类和对象的代码
栈区:存放属性和方法的引用地址
堆区:存放对应的具体的值
除此之外还有全局区(静态区)存放静态变量,常量区存放常量字符串
拓展阅读:
1、栈区(stack)—由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
2、堆区(heap)—一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。
3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。
- 程序结束后由系统释放。
4、文字常量区—常量字符串就是放在这里的。程序结束后由系统释放
5、程序代码区—存放函数体的二进制代码。
本站内容均为小米原创,转载请注明出处:小米技术社区>> PHP的类和对象在内存中的分布情况