两者的区别:
值传递是两个变量占用不同的内存空间,而传引用则是同一个内存空间,实际就是对同一个变量进行操作。 传值,原有的值不会消失,不会改变,两个变量分别占用一个内存;传引用,原值会被修改,两个变量,只占用一个内存空间。
按值传递:函数范围内对值的任何改变在函数外部都会被忽略
按引用传递:函数范围内对值的任何改变在函数外部也能反映出这些修改。
// 传值对参数的修改不会改变原参数
// 传引用时可以直接修改原参数
优缺点:
按值传递:php必须复制值(要重新构造一份原参数的拷贝)。特别是对于大型的字符串和对象来说,这将会是一个代价很大的操作。
引用传递:不需要复制值(不需要重新开辟内存空间),对于性能提高很有好处。
什么情况下使用按值传递或引用传递?
如果不想改变原变量的值的时候就按值传递。
如果可以让函数改变了原变量的值就可以引用传递。
// 如果你的参数对象比较大(占用内存很多),而函数本身不需要修改原对象时,这个时候就推荐传引用,可以省去临时对象的构造开销。
// 如果你有实际修改原参数的需要,那么就只能传引用了。
// 按值传递 $a =3; $b=5; $a=$b; echo $a,$b; // 5 5
//引用传递 $a=3; $b=5; $a=&$b; //把b的地址赋值给 $a 更改b的值 就是更改a的值 $b=9; echo $a,$b; // 9 9 unset($b); echo $a; // 9 //变量有个机制,如有多个变量指向同一个地址 取消其中一个变量,其他变量不受影响 //假如把指向该地址的所有变量都取消了 则echo变量的结果是NULL
- 我的微信
- 这是我的微信扫一扫
- 我的微信公众号
- 我的微信公众号扫一扫