# 变量传值方式 [TOC] 首先,何为变量传值,所谓变量传值就是将一个变量赋值给另外一个变量 ## 值传递(拷贝传值) 值传递又称拷贝传值,就是将一个变量的值复制一个给另外一个变量。此时二个变量的值相同,但是此时的二个变量又是互相独立的存在,操作其中任何一个变量,另外一个变量都不会受到其影响。 在PHP中,**字符串型、整型、浮点型、布尔型、NULL、数组**,默认使用的是拷贝传值方式。 ``` <?php $a = 100; $b = $a; $a = 300; echo $a,$b; # 结果:a300,b100,他们是互相独立的存在,互相不会影响 ``` ## 引用传递 引用传递又称为地址传递,就是将一个数据的数据空间地址拷贝一个传递给另一个变量,此时二个变量的数据空间地址都指向一个地址,改变其中一个值另外一个值也会受到影响而改变。如果需要将值传递改变成引用传递,要在变量前面加上一个`&`符号,有此符号那么就是说明他就是引用传递。 在PHP中**资源**和**对象**默认是引用传递。在我们**海量传值**的时候,**引用传递效率高于值传递**。 >[danger] 注意:最重要就是当 unset 一个引用,只是断开了变量名和变量内容之间的绑定。这并不意味着变量内容被销毁了 ``` <?php $a = 100; $b = &$a; $a = 1000; echo $a,$b; # 结果:a1000,b1000 $a = 100; $b = &$a; $a = 1000; unset($a); echo $b; # 结果为:b1000,最重要就是当 unset 一个引用,只是断开了变量名和变量内容之间的绑定。这并不意味着变量内容被销毁了 ``` ## 值传递与引用传递的区别 一个是把自己复制一份给另外一个,改变其中任何一个都不会影响另外一个。而引用传递,是连同数据空间地址都给另外一个,此时二个互相操作都会影响另外一个。没有&那么他就是值传递,引用传递必须使用`&`