php 对象赋值_PHP对象在内存中的分配

目录

  • 概述
  • PHP对象在内存中的分配
  • php7进阶到架构师相关阅读

概述

这是关于php进阶到架构之php7性能优化学习的第篇文章:php代码性能常见优化技巧。

  • 第一篇:php7代码性能常见优化技巧
  • 第二篇:PHP对象在内存中的分配

PHP对象在内存中的分配

内存从逻辑上说大体上是分为4 段,栈空间段、堆空间段、代码段、初始化静态段,程序里面不同的声明 放在不同的内存段里面。

数据段(data segment)

通常是指用来存放程序中已初始化且不为0的全局变量如:静态变量和常量

代码段(code segment / text segment)

通常是指用来存放程序执行代码的一块内存区域,比如函数和方法;

栈空间段

是存储占用相同空间长度并且占用空间小的数据类型的地方,比如说整型1,10,100,1000,10000,100000 等等,在内存里面占用空间是等长的,都是64 位4 个字节。堆内存 数据长度不定长,而且占有空间很大的数据类型的数据

堆内存

数据长度不定长,而且占有空间很大的数据类型的数据存放位置

php对象在内存中存在哪里呢?

对象在PHP 里面和整型、浮点型一样,也是一种数据类,都是存储不同类型数据用的, 在运行的时候都要加载到内存中去用,那么对象在内存里面是怎么体现的呢?这样的数据是放在堆内存里面的。

各类型在内存存储逻辑图如下:

5edaf2e6ee1138b66a30d3066d045845.png

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

对象是放在堆里面的,但对象名称是放在栈里面的

$p1 = new Person();$p2 = new Person();$p3 = new Person();

$p1, $p2,$p3就是我们实例出来的对象名称,一个类可以实例出多个对象,每个对象都是独立的。

e0f2ecedbe689bcf6d463ec70d8fa6ce.png

从上图可以看出:

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

(2)一共有3 次new Person(),所以会在堆里面开辟3 个空间,产生3 个实例对象,每个对象之间都是相互独立的,使用自己的空间。

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

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

(5)$p1=new Person();等号的右边$p1 是一个引用变量,通过赋值运算符“=”把对象的首地址 赋给“$p1”这个引用变量,所以$p1 是存储对象首地址的变量,$p1 放在栈内存里边,$p1 相当 于一个指针指向堆里面的对象,所以我们可以通过$p1 这个引用变量来操作对象。

php7进阶到架构师相关阅读

php7进阶到架构师相关阅读

https://www.kancloud.cn/gofor/gofor

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值