常用知识 - 传对象时会传引用 ¶
作者:KK
发表日期:2016.9.1
介绍 ¶
PHP在传递object(对象)类型参数的时候会自动变成传引用
:
function xx($user){
$user->age = 99;
}
$obj = json_decode('{"age" : 18}');
xx($obj);
echo $obj->age; //99
最后输出age为99是因为xx函数将age改成了99,说明函数里面对对象的修改会影响外面的$obj,其实外面传$obj变量进去的时候,并不是复制了一个$obj的值再传给xx函数,而是底层自动变成了传递$obj的引用
总结 ¶
PHP在传递对象参数时会传引用而不是传值,但非对象时(包括数组)则是直接传值而不是传引用
于是上面的代码如果xx函数是这样定义的话就多余了:
function xx(&$user){} ///如果参数是对象,就不需要加这个 & 号了
相关了解 ¶
- 另外嘛,很多框架的DB查询层在 select,from,where,limit,offset,groupBy,sortBy 这些方法上都支持链式编程,它们的实现就是在比如where后
return $this
来让外部继续执行下一步嘛
其实返回$this不会真的复制一个对象自身再返回出去,而是返回了自身的引用而已
- 而在JS里传数组、对象都会走引用,因为JS数组的本质就是对象