PHP 堆栈数据段代码段的理解
栈:基本数据类型(粗暴的理解为空间A,存着数字8)
堆:new 出来的对象
代码段:函数、运行的代码
数字段:字符串常量,全局变量,静态变量等
对象在PHP中和整型,浮点型一样,也是一种数据类,都是存储不同类型数据用的,在运行的时候要加载到内存中去用。
内存从逻辑上说,大体分为4段,栈空间段,堆空间段,代码段,初始化静态段,程序里面不同的声明放在不同的内存段里面。
数据段(data segment) 通常指用来存放程序中已经初始化且不为0的全局变量,如静态变量和常量
代码段(code segment / text segment) 通常是指用来存放程序执行代码的一块内存区域,比如函数&&方法
栈空间段是存储占用相同空间长度并且占用空间小的数据类型的地方,比如整型等,在内存里面占用空间是等长的,都是64位4个字节。
那么数据长度不定长,而且战友空间很大的数据类型则放在堆内存里面。
栈内存是可以直接存取的,而堆内存是不可以直接存取的内存。对程序来说,对象就想是一种大数据类型,而且占用空间不定长的类型,所以会放在堆里面。
但是对象名称放在栈里面,这样通过对象的名称就可以使用对象了。
如 $p = new Persion
$p就是我们实例出来的对象名称,同理
$p1,$p2
也是实例出来的对象名称,每个对象都有自己独立的空间,没有联系,互不影响。
$p = new Persion
等号右边是对象实例,在堆内存里面的实体,等号左边的$p
是一个引用变量,通过赋值运算符 = 把对象的地址赋给 $p 这个引用变量,所以 $p 是存储对象地址的变量, $p 放在栈内存里面, $p相当于一个指针指向堆里面的对象,所以我们通过 $p 这个引用变量来操作对象,通常可以称为对象引用为对象