对于问题的第二部分,请参阅
array page of the manual,其中声明(引用):
Array assignment always involves value
copying. Use the reference operator to
copy an array by reference.
给出的例子:
$arr1 = array(2, 3);
$arr2 = $arr1;
$arr2[] = 4; // $arr2 is changed,
// $arr1 is still array(2, 3)
$arr3 = &$arr1;
$arr3[] = 4; // now $arr1 and $arr3 are the same
?>
对于第一部分,最好的方法是确保是试试;-)
考虑这个代码示例:
function my_func($a) {
$a[] = 30;
}
$arr = array(10, 20);
my_func($arr);
var_dump($arr);
它会给这个输出:
array
0 => int 10
1 => int 20
这表示函数没有修改作为参数传递的“外部”数组:它作为副本传递,而不是引用。
如果你想通过引用传递,你必须修改函数,这样:
function my_func(& $a) {
$a[] = 30;
}
并且输出将变为:
array
0 => int 10
1 => int 20
2 => int 30
因为,这次,数组已经“通过引用”传递。
不要犹豫,阅读手册的References Explained部分:它应该回答你的一些问题;-)