当我分配值时,php会复制值吗?

时间:2016-03-01 10:04:53

标签: php

我看到很多这样的代码:

function load_items(&$items_arr) {
    // ... some code
}

load_items($item_arr);
$v = &$items_arr[$id];

与以下代码进行比较:

function load_items() {
    // ... some code
    return $items_arr;
}

$item_arr = load_items();
$v = $items_arr[$id];

第二个代码是否会复制items_arr$item_arr[$id] 第一个代码会导入性能吗?

1 个答案:

答案 0 :(得分:2)

不,它不会立即复制该值。写入时复制 是PHP中使用的内存管理方法之一。它确保在变量之间复制值时不会浪费内存。 这意味着当你分配时:

$v = $items_arr[$id];

PHP只会更新符号表以指示$v指向$item_arr[$id]的相同内存地址,就在您之后更改$item_arr$v然后PHP分配更多内存,然后执行复制。

通过延迟这个额外的内存分配和复制PHP在某些情况下节省了时间和内存。

有关PHP内存管理的好文章:http://hengrui-li.blogspot.no/2011/08/php-copy-on-write-how-php-manages.html