小编典典

是否有将 PHP 数组复制到另一个数组的功能?

all

是否有将 PHP 数组复制到另一个数组的功能?

我曾多次尝试复制 PHP 数组。我想将对象内部定义的数组复制到对象外部的全局对象中。


阅读 136

收藏
2022-03-06

共1个答案

小编典典

在 PHP 中,数组是通过副本分配的,而对象是通过引用分配的。这意味着:

$a = array();
$b = $a;
$b['foo'] = 42;
var_dump($a);

将产生:

array(0) {
}

然而:

$a = new StdClass();
$b = $a;
$b->foo = 42;
var_dump($a);

产量:

object(stdClass)#1 (1) {
  ["foo"]=>
  int(42)
}

您可能会被错综复杂的事物弄糊涂,例如ArrayObject,它是一个行为与数组完全一样的对象。然而,作为一个对象,它具有引用语义。

编辑:@AndrewLarsson 在下面的评论中提出了一个观点。PHP 有一个特殊的特性叫做“引用”。它们有点类似于 C/C++
等语言中的指针,但并不完全相同。如果您的数组包含引用,那么当数组本身通过副本传递时,引用仍将解析为原始目标。这当然通常是理想的行为,但我认为值得一提。

2022-03-06