php的按值传递与引用传递

2015/08/1411:31:31php的按值传递与引用传递已关闭评论 1,101

两者的区别:

值传递是两个变量占用不同的内存空间,而传引用则是同一个内存空间,实际就是对同一个变量进行操作。 传值,原有的值不会消失,不会改变,两个变量分别占用一个内存;传引用,原值会被修改,两个变量,只占用一个内存空间。

按值传递:函数范围内对值的任何改变在函数外部都会被忽略
按引用传递:函数范围内对值的任何改变在函数外部也能反映出这些修改。
// 传值对参数的修改不会改变原参数
// 传引用时可以直接修改原参数

优缺点

按值传递: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
  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin