foreach $arr as $v, 如果$v是一个对象,则创建的是一个引用,不是拷贝建立新值。所以在一个function 里面 return $v, 在function 外修改了$v的值,会直接作用到$arr.
<?php
class A
{
public $a;
}
$t1 = new A;
$t1->a = "test 1";
$t2 = new A;
$t2->a = "test 2";
$f = array($t1,$t2);
$i = 3;
foreach($f as $v)
{
$v->a = "test ".$i;
$i++;
}
//print_r($f);
function test1($t1,$t2)
{
$f = array($t1,$t2);
print_r($f);
$i = 3;
foreach($f as $v)
{
$v->a = "test ".$i;
$i++;
return $v;
}
}
$t3 = test1($t1,$t2);
$t3->a ="test 7";
test1($t1,$t2);
?>
输出结果:
Array( [0] => A Object ( [a] => test 3 ) [1] => A Object ( [a] => test 4 ))Array( [0] => A Object ( [a] => test 7 ) [1] => A Object ( [a] => test 4 ))