对象在内容的存储方式
来源:互联网 发布:php安装sqlsrv扩展 编辑:程序博客网 时间:2024/05/29 15:38
对像在PHP 里面和整型、浮点型一样,也是一种数据类,都是存储不同类型数据用的, 在运行的时候都要加载到内存中去用,那么对象在内存里面是怎么体现的呢?内存从逻辑上 说大体上是分为4 段,栈空间段、堆空间段、代码段、初始化静态段,程序里面不同的声明 放在不同的内存段里面,数据段(data segment)通常是指用来存放程序中已初始化且不为0的全局变量如:静态变量和常量;代码段(code segment / text segment)通常是指用来存放程序执行代码的一块内存区域,比如函数和方法;栈空间段是存储占用相同空间长度并且占用空间小的数据类型的地方,比如说整型1,10,100,1000,10000,100000 等等,在内存里面占用空间是等长的,都是64 位4 个字节。那么数据长度不定长,而且占有空间很大的数据类型的数据放在那内存 的那个段里面呢?这样的数据是放在堆内存里面的。如下图:
栈内存是可以直接存取的,而堆内存是 不可以直接存取的内存。对于我们的对象来数就是一种大的数据类型而且是占用空间不定长的类型,所以说对象是放在堆里面的,但对象名称是放在栈里面的,这样通过对象名称就可 以使用对象了。$p1 就是我们实例出来的对象名称,同理,$p2,$p3 也是我们实例出来的对象名称,一个类可以实例出多个对象,每个对象都是独立的,上面的代码相当于实例出来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 相当 于一个指针指向堆里面的对象,所以我们可以通过$p1 这个引用变量来操作对象,通常我们也 称对象引用为对象。
- 对象在内容的存储方式
- 使用memcache的方式存储session内容
- localStorage的存储数组对象的方式
- java treeset实现不重复存储的方式(在类对象中实例化CompareTo)
- Java创建对象的存储方式
- java对象存储方式
- float和double在的存储方式
- float和double在的存储方式
- float和double在的存储方式
- float和double在的存储方式
- 程序在计算机内部的存储方式
- 借用一个程序 来说明 多线程 和单态 以及 对象在两种情况下的存储方式。
- 在 DB2 中存储行业 XML 内容的快速方法
- 在存储过程中,表记录内容之间的复制
- 将文本文件的内容存储在DataSet中的方法总结
- SharePoint 2013 使用 RBS 功能将二进制大型对象 BLOB 存储在内容数据库外部。
- 黑马程序员_Arraylist、HashSet存储自定义对象的方式
- 黑马程序员_Treeset存储对象的两种方式
- STL源码剖析 - 第5章 关联式容器 - multimap
- 查看连接到本机ftp服务器的指定ip
- 使用javascript实现html文本不可选
- 深入理解Core Data
- 正则匹配内容为空的HTML标签
- 对象在内容的存储方式
- 01 Shell入门基础
- Linux bash shell 逐行读取文本文件的三种方法
- 利用jxl创建excel遇到的一些问题
- PHP new ,clone 和引用
- 02 Shell编程环境的搭建
- C++中的Lambda表达式详解
- 常见面试之机器学习算法思想简单梳理(上)
- socket编程示例(多线程)