前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PHP对象的内存模型

PHP对象的内存模型

作者头像
用户7657330
发布2020-08-14 11:28:54
1.8K0
发布2020-08-14 11:28:54
举报
文章被收录于专栏:程序生涯程序生涯程序生涯

对象在PHP 里面和整型、浮点型一样,也是一种数据类,都是存储不同类型数据用的,

在运行的时候都要加载到内存中去用,那么对象在内存里面是怎么体现的呢?

内存从逻辑上 说大体上是分为4 段:

栈空间段、堆空间段、代码段、初始化静态段

程序里面不同的声明 放在不同的内存段里面

数据段(data segment):是指用来存放程序中已初始化且不为0的全局变量如:静态变量和常量;

代码段(code segment / text segment):是指用来存放程序执行代码的一块内存区域,比如函数和方法;

栈空间段:是存储占用相同空间长度并且占用空间小的数据类型的地方,比如说整型1,10,100,1000,10000,100000 等等,

在内存里面占用空间是等长的,都是64 位4 个字节。那么数据长度不定长,

而且占有空间很大的数据类型的数据放在那内存 的那个段里面呢?这样的数据是放在堆内存里面的。

栈内存是可以直接存取的,而堆内存是 不可以直接存取的内存。

对于我们的对象来说就是一种大的数据类型而且是占用空间不定长的类型,所以说对象是放在堆里面的,

但对象名称是放在栈里面的,这样通过对象名称就可 以使用对象了。

p1 就是我们实例出来的对象名称,同理,p2,

一个类可以实例出多个对象,每个对象都是独立的,上面的代码相当于实例出来3 个人来,

每个人之间是没有联系的,只能说明他们都是人类,每 个人都有自己的姓名,性别和年龄的属性,

每个人都有说话和走路的方法,只要是类里面体 现出来的成员属性和成员方法,

实例化出来的对象里面就包含了这些属性和方法。

$p1=new Person();

对于这个条代码,$p1 是对象名称在栈内存里面new Person()是真正的对象是在堆内存 里面的

$p1=new Person();等号右边是真正的对象实例,在堆内存里面的实体,

上图一共有3 次new Person(),所以会在堆里面开辟3 个空间,产生3 个实例对象,

每个对象之间都是相互独立的,使用自己的空间,在PHP 里面,

只要有一个new 这个关键字出现就会 实例化出来一个对象,在堆里面开辟一块自己的空间。

每个在堆里面的实例对象是存储属性的,比如说,现在堆里面的实例对象里面都存有姓 名、性别和年龄。

每个属性又都有一个地址。 p1=new Person();等号的右边p1 是一个引用变量,

通过赋值运算符“=”把对象的首地址 赋给“$p1”这个引用变量,

所以p1 是存储对象首地址的变量,p1 放在栈内存里边,

所以我们可以通过$p1 这个引用变量来操作对象,通常我们也 称对象引用为对象。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-03-07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档