Доброе время суток формучане!
Разбирался тут со ссылками и объектами в пэхе, и вот столкнулся со следующей странностью:
<?php
class test{
public $a = 3;
public $b = NULL;
function __construct(){
$this->b =& $this->a;
}
}
$vvv = new test();
$v = clone $vvv;
$vvv->a = 434;
echo $vvv->a, PHP_EOL;
echo $v ->a, PHP_EOL;
Так вот, этот код выводит "434" и "434"... как так?
т.е. я создаю клон объекта стандартной логикой, которая копирует значение каждого свойства одного экземпляра в одноименное свойство другого экземпляра... верно?
Таким образом:
vvv = {
a = 434,
b - ссылается на "vvv.a"
};
v = {
a = 434,
b - в начальный момент времени ссылалась на "v.a", но после клонирования стала ссылаться на "vvv.a" (по крайней мере должна)
};
но почему изменение "v.a" влияет на "vvv.a"? ведь они не связаны ссылкой!
аналогично, если я даже изменю по ссылке "vvv.b = 111", то и "v.b" и "v.a" будут выдавать это-же изменение...