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;