由于工作忙碌,博客已经断更整一年,最近终于抽出点时间,来分享一些近一年经历中印象深刻的经历。

大概三年前,曾经整理过这样两篇文章《JavaScript函数究竟是值传递还是引用传递?》、《Java方法究竟是值传递还是引用传递?》,不为别的,只因为在工作中有人遇到类似问题,查阅资料后加以整理。巧的是,前阵子做php的同事又造出了相似的bug,不同的是,php并不像前两者一切皆值传递。

在php的世界里,存在传值和传引用两种方式

传值:通过拷贝变量值,传递到函数内部,内部修改不会影响到变量本身;
传引用 :以地址的方式传递变量到函数内部,内部修改可直接影响变量。

举个例子

// 值传递
$var1 = 1;
function test1($var2)  
{
    $var2 = 2;
}
test1($var1);
echo $var1; // 1

// 引用传递
$var3 = 1;
function test2(&$var4)  
{
    $var4 = 2;
}
test2($var3);
echo $var3; // 2

两者差异显而易见,但是这似乎不太符合函数式编程的思想,没有返回值,更难以定位问题。对此,大家可以根据需求,用不用引用传递自行判断吧