变量传值定义:将一个变量赋值给另外一个变量
变量传值一共有两种方式:值传递,引用传递
值传递:将变量保存的值复制一份,然后将新的值给另外一个变量保存。(两个变量值暂时相同但是变量地址不同)
//好比我家来了一只野猫,在我家也有一只(值相同,都是猫),但是我的猫和野猫的家是来自不同的地方。(地址可变)
引用传递:将变量保存的值所在的内存地址,传递给另外一个变量:两个变量指向同一块内存空间。(两个变量地址一样指向同一个数值)
//现在野猫找到新主人,不回去了(地址相同,现在都是我家的),既然是我家的,那么就不分野猫家猫,都是我的宠物猫(值暂时都相同,都是我的宠物猫)
在内存中,通常有以下几个分区
栈区:程序可以操作的内容部分(不存数据,运行程序代码),少但是快
代码段:存储程序的内存部分(不执行)
数据段:存储普通数据(全局区和静态区)
堆区:存储复杂数据,大但是效率低
值传递:(如图)
1、代码装载:从脚本文件中将代码读取出来,进行编译,将编译的结果存放在代码段(字节码)
2、代码执行:从代码段中一行一行的执行代码
2.1 执行$a=1:在栈区开辟一块内存存储$a,在数据段中开辟一块内存保存值1,然后将1所在的位置赋值给a变量
2.2 执行$b=$a:栈区开辟存储$b:发现是赋值运算,会取出$a的值,重新在数据段存储,内存新增地址赋值给b变量
2.3 执行$b=2
3、脚本执行结束:系统会回收所有的内存(栈区、代码段)
引用传递:(如图)
语法:$新变量=&$老变量
1、代码装载:从脚本文件中将代码读取出来,进行编译,将编译的结果存放在代码段(字节码)
2、代码执行:从代码段中一行一行的执行代码
2.1 执行$a=1:在栈区开辟一块内存存储$a,在数据段中开辟一块内存保存值1,然后将1所在的位置赋值给a变量
2.2 执行$b=&$a:栈区开辟存储$b:发现是赋值运算,而且是引用赋值,会取出$a所保存的内存地址,将内存地址赋值给b变量(好处是数据的空间被很好的利用,不用重复)
2.3 执行$b=2
3、脚本执行结束:系统会回收所有的内存(栈区、代码段)。