Rus*_*lex 11 php arrays variable-assignment
可能重复:
php中的数组是按值传递还是按引用传递?
我听说PHP可以选择如何分配数组,取决于数组大小.它可以通过复制值(作为任何标量类型)或通过引用进行分配.
PHP总是通过复制值将数组赋值给变量,如手册中所述.
或者它可以通过引用分配.?
<?php $a = array(1,2,3); ?>
Run Code Online (Sandbox Code Playgroud)
Mic*_*ski 20
在将数组变量分配给其他变量时,可以通过引用分配数组:
// By value...
$a = array(1,2,3);
$b = $a;
array_push($a, 5);
print_r($b);
// $b is not a reference to $a
Array
(
[0] => 1
[1] => 2
[2] => 3
)
// By Reference
$a = array(1,2,3);
$b = &$a; // Here we assign by reference
array_push($a, 5);
print_r($b);
// $b is a reference to $a and gets the new value (3 => 5)
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 5
)
Run Code Online (Sandbox Code Playgroud)
Dav*_*dom 13
除非您引用已存在的内容,否则无法通过引用分配内容.同样,你不能复制不存在的东西.
所以这段代码:
$a = array(1,2,3);
Run Code Online (Sandbox Code Playgroud)
...既不复制也不引用 - 它只是创建一个新的数组,用值填充它,因为值是按字面指定的.
但是,这段代码:
$x = 1;
$y = 2;
$z = 3;
$a = array($x,$y,$z);
Run Code Online (Sandbox Code Playgroud)
...副本从值$x,$y以及$z到一个数组1.用于初始化数组值的变量仍然存在,并且可以修改或销毁,而不会影响数组中的值.
这段代码:
$x = 1;
$y = 2;
$z = 3;
$a = array(&$x,&$y,&$z);
Run Code Online (Sandbox Code Playgroud)
...创建一个引用数组$x,$y并$z(注意到&).如果,在运行此代码后,我修改$x- 假设我给它一个值为4 - 它也将修改数组中的第一个值.因此,当您使用数组时,$a[0]现在将包含4.
有关PHP中参考工作方式的更多信息,请参阅本手册的这一部分.
1 根据用作数组成员的变量的类型和值,即使按赋值分配,也可能不会在赋值时执行复制操作.在内部PHP由于性能和内存效率的原因,在尽可能多的情况下使用写时复制.但是,就代码上下文中的行为而言,您可以将其视为简单副本.