Вопрос по клонированию объектов

uliss

Новичок
Вопрос по клонированию объектов

Я немного запутался - объект не клонируется с следуещем коде
PHP:
class Unit{
    private $_var;
	function __construct($var){
		$this->_var = $var;
	}

	function add(Unit $var)	{// суррогат операции +=
		$this->_var += $var->_var;
	}
}

class Point{
    private $_x;
    private $_y;
	function __construct(Unit $x, Unit $y)	{
		$this->_x = $x;
		$this->_y = $y;
	}

	function __clone(){// 
		$x = clone $this->_x;
		$y = clone $this->_y;
		return new Point($x, $y);
	}

	function movex_by(Unit $off){// сдвигаем точку по оси x 
		$this->_x->add($off);
	}
}

$pt0 = new Point(new Unit(0), new Unit(0));//первая точка
$pt1 = clone $pt0;// вторая точка
print_r($pt0);
print_r($pt1);
$pt0->movex_by(new Unit(20));// двигаем первую точку
print_r($pt0);
print_r($pt1);
вторая точка тоже перемещается!!
Ведь если $pt1 - клон первой точки - почему это происходит? В чем ошибка?
PHP 5.1.2

Вот вывод скрипта:
Код:
Point Object
(
    [_x:private] => Unit Object
        (
            [_var:private] => 0
        )
    [_y:private] => Unit Object
        (
            [_var:private] => 0
        )
)
Point Object
(
    [_x:private] => Unit Object
        (
            [_var:private] => 0
        )
    [_y:private] => Unit Object
        (
            [_var:private] => 0
        )
)
Point Object
(
    [_x:private] => Unit Object
        (
            [_var:private] => 20
        )
    [_y:private] => Unit Object
        (
            [_var:private] => 0
        )
)
Point Object
(
    [_x:private] => Unit Object
        (
            [_var:private] => 20
        )
    [_y:private] => Unit Object
        (
            [_var:private] => 0
        )
)
 

crocodile2u

http://vbolshov.org.ru
Курить Object cloning:

PHP:
function __clone(){//
        $this->_x = clone $this->_x;
        $this->_y = clone $this->_y;
}
 
Сверху