预定义变量:系统定义的变量,都是数组,比如:
$-GET:获取所有表单以get方式提交的数据
$_POST:保存post方法提交的数据
$_REQUEST:get和post提交的都会保存
$_GLOBALS:PHP所有的全局变量
$_COOKIE:ciikie会话数据
-
可变变量:如果一个变量保存的值刚好是另一个变量的名字,那么可以直接访问这个变量得到另一个变量的值,再变量前面朵加一个“$”
$a="b"; $b="bb"; echo $$a
-
变量传值:姜一个变量赋值给另一个变量
-
值传递:姜变量保存的值复制一份,讲新的值赋给另一个变量,两个变量没有关系
-
引用传递:将变量保存的值所在的内存地址,传递给另一个变量,两个变量指向同一内存空间,两个变量是同一个值 【语法:$新变量=&$老变量】【用这种方法,新变量的值呗改变,老变量也会改变,毕竟是一点个地方存储的嘛】
-
-
内存分区
-
栈区:系统进行操作,程序运行的地方,不存储数据,小但是快
-
代码段:存储程序的部分(不执行)
-
数据段:存储普通数据(全局区和静态区)
-
堆区:存储复杂数据,大但是效率低
-
-
内存和代码
/*以这段代码为例*/ <?php $a=1; $b=$a;(值传递) $b=2; echo $a$b;
-
代码装载:从脚本文件中将代码取出来,进行编译,将编译的结果放在代码段
-
代码执行:从代码段中一行一行的执行代码
-
执行$a=1:再栈区开辟一块内存存储$a,在数据段中开辟一块内存保留值1;然后将1所在的位置赋给a变量
-
执行$b=$a :栈区开辟存储$b;发现是赋值运算,(而引用传递是直接取出存储a变量的值的地址赋给b变量,并不在数据段开辟新的空间进行存储)会取出$a的值,重新在数据段存储;将新值的内存地址赋值给b变量
-
执行$b=2
-
脚本执行结束:系统会回牧所有的内存(栈区,代码段)
-
-