uliss
Новичок
Вопрос по клонированию объектов
Я немного запутался - объект не клонируется с следуещем коде
вторая точка тоже перемещается!!
Ведь если $pt1 - клон первой точки - почему это происходит? В чем ошибка?
PHP 5.1.2
Вот вывод скрипта:
Я немного запутался - объект не клонируется с следуещем коде
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
)
)
)