Shallow copy vs. Deep copy vs. Referencing

Shallow

When B is assigned to A the two variables refer to the same area of memory. Later modifications to the contents of either are instantly reflected in the contents of other, as they share contents.

<?php
class Alfa
{
    public int $i = 101;
}
$a = new Alfa;
$b = $a;
$c = clone $a;
$b->i = 202;
$c->i = 303;
var_dump($a); // ["i"] => int(202)

(function (object $o): void {
    $o->i = 404;
})($a);
var_dump($a);    // ["i"]=>int(404)

Също, ако предаваме обект като аргумент на функция, го предаваме по shallow copy, което се вижда от горният пример.

Deep

When B is assigned to A the values in the memory area which A points to are copied into the memory area to which B points. Later modifications to the contents of either remain unique to A or B; the contents are not shared.

Излиза, че shallow copy е просто референсване към едно и също value. Ако искаш наистина да копираш стойността – deep copy.

В PHP shallow copy е когато просто присвоим една обектна проенлива на друга: $o1 = $o2;

Deep copy е когато клонираме един обект с clone така $o1 = clone $o2;

Вашият коментар

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са отбелязани с *