PHP执行流程:
1 开辟内存空间
2 读取PHP代码到内存
3 编译阶段
声明变量, 声明函数, 语法检查, 语义检查, 代码优化, 分析并得到代码树
4 执行阶段
变量的赋值, 函数的调用以及代码执行
5 执行完毕
内存的分配
(1)栈内存:特点小而快, 占用内存比较小但是运算速度特别快, 定义的变量名称、函数的名称都是放在栈内存中。
(2)堆内存:特点大而慢, 占用内存比较大但是运算速度相对于栈内存而言比较慢, 定义的复合类型的数据(如数组、对象)都是放在对内存中的。
(3)代码段:所有的代码的如果想要执行都首先要编译到代码段中才能执行。
(4)数据段: 主要分为两块区域(全局区和静态区)
主要用于存储全局变量, 静态区主要用于存储静态变量
在PHP局部作用域中, 我们可以使用static关键词来声明静态变量, 静态变量不同于普通的局部变量:
普通局部变量:是在函数执行时, 才进行声明;
静态变量:是在函数编译时, 就已经声明了而且只需声明一次, 以后每次执行函数时, 都自动调用已经声明后的变量, 不需要重新声明;
在javascript中基本数据类型的赋值操作都是赋值传值; 复合数据类型的赋值都是引用传址。
基本数据类型的变量名和数据是直接存在"快速内存"(栈内存)中, 而复合数据类型(对象和数组)的存储分两个部分:
实际数据存在"慢速内存"(堆内存)中, 栈内存中只存变量名和数据在堆内存中的位置(地址)
对象在内存中的表现形式
计算机内存一共分为四块区域:栈内存、堆内存、数据段、代码段
栈内存:小而快(主要用于存储定长型数据:整型、浮点型、布尔类型)
堆内存:大而慢(主要用于存储变长型数据:数组、对象、字符串)
数据段:(全局区与静态区)
全局区:存储全局变量
静态区:存储静态变量
代码段:函数存储区
特别说明:
变量的存储:在栈内存中占用一块内存地址
字符串、数组、对象的存储:在堆内存中占用一段连续的内存地址