Php клон не работает

Возможен клон php объекта класса и всегда все доступное изменение

пример

Class A{
  private $data;
  public function set($name, $value){
    $this->data[$name] = $value;
  }

  public function get($name){
    return isset($this->data[$name]) ? $this->data[$name] : null;
  }

  public function __clone(){
    $this->data = unserialize(serialize($this->data));
  }
}

Работа с клоном

$a = new A();
$a->set('dog', 'Kiki');

$b = clone $a;

var_dump($b->get('dog'));

dump value is 'Kiki';

Так что мне нужен объект для $b всегда динамического изменения, когда объект $a является примером изменения

$a = new A();
$b = clone $a;

$a->set('dog','Kiki');
var_dump($b->get('dog'));

dump value is null;

как изменить динамический объект $b, когда объект $a изменился?

Спасибо

1 ответ

Единственный способ сделать это - справиться с этим самостоятельно. Я бы предложил немного расширить класс А:

Class A{

  private $data;
  public $sandbox;

  public function set($name, $value){
    $this->data[$name] = $value;
    $this->applyChanges();
  }

  public function get($name){
    return isset($this->data[$name]) ? $this->data[$name] : null;
  }

  public function __clone(){
    $this->data = unserialize(serialize($this->data));
  }

  public function createSandBox() {
      $this->sandbox = new A();
      $this->sandbox = clone $this;
  }

  public function applyChanges() {
      $this->sandbox = clone $this;
  }

}
Другие вопросы по тегам