先敲两段代码然后就可以看出两者的区别,咱们透过现象看本质
function sum($a){
$a++;
$b = $a;
return $b;
}
$a = 10;
echo sum($a).'<br />';//11
echo $a;//10
function sum(&$a){
$a++;
$b = $a;
return $b;
}
$a = 10;
echo sum($a).'<br />';//11
echo $a;//11
两段代码的差别在于函数sum的参数上,一个是传值$a,另一个是传引用&$a,其结果是传值过后$a的值最终没有发生改变,反之传引用过后$a的值发生了变化。这里学过C语言的童鞋就明白是怎么回事了,压栈的是引用的副本。由于引用是指向某个变量的,对引用的操作其实就是对他指向的变量的操作。(作用和传指针一样,只是不用解引用) &是指向某个变量地址的符号,函数sum中的形参&$a实际上就是实参$a,那么将其传进sum中进行了一次++运算之后,实参$a的值实际上也就发生了改变,就是这么回事。