<?php $tar = array('father'=>'rendy'); function test(array $arr){ $arr['father'] = 'test'; echo 'TEST>>'.$arr['father']; echo "\n"; } test($tar); echo $tar['father'];
输出
TEST>>test
rendy
<?php $tar = new stdClass(); $tar->father = 'rendy'; function test($obj){ $obj->father = 'test'; echo 'TEST>>'.$obj->father; echo "\n"; } test($tar); echo $tar->father;
输出
TEST>>test
test
总结一下
PHP5.3
argument 是 obj的时候 有副作用
argument 是 arr的时候 没有副作用
=============
这是为什么呢?
=============
这个得从对象赋值说起
<?php $par = new stdClass(); $par->father = 'rendy'; $tar = clone $par; $tar->father = 'par'; echo $tar->father."\n"; echo $par->father."\n";输出
par
rendy
#5去掉clone
输出
par
par
再看一下数组的赋值
<?php $par = array('father'=>'rendy'); $tar = $par; $tar['father'] = 'par'; echo $tar['father']."\n"; echo $par['father']."\n";
输出
par
rendy