Полностью клонировать объект

Тема в разделе "Как сделать...", создана пользователем KillDead, 16 апр 2010.

Статус темы:
Закрыта.
  1. KillDead

    KillDead

    Регистр.:
    11 авг 2006
    Сообщения:
    890
    Симпатии:
    558
    Возникла необходимость клонировать (Хочу уйти от этого, но пока не могу придумать как) пользовательский класс. Пользовательский- в смысле написанный не обязательно разработчиком, а пользователем АПИ, который может включать какие то классы.
    При клонировании пхп копирует только родительский класс, а все вложенные например $this->class->var $this->class->class2->var нет. Заплатка от php.net
    PHP:
        function __clone() {
            foreach(
    $this as $name => $value) {
                if(
    gettype($value)=='object') {
                    
    $this->$name= clone($this->$name);
                }
            }
        }
    может помочь, но если вложенность классов 2 и более, заплатку нужно изменять. Плюс к этому некоторые классы могут хранить объекты в массивах var $this->class[2]->class2->var. А если начать обходить все переменные вложенного класса, как мне кажется, на это может уйти слишком много памяти.:confused:
    Есть идеи?
     
  2. CrashX

    CrashX В прошлом XSiteCMS

    Регистр.:
    6 июн 2008
    Сообщения:
    682
    Симпатии:
    112
    я уже искал решение данной проблемы в итоге отказался от клонирования в целом, так как и искал решение перезагрузки обьектов, перезагрузку решал своей функцией сброса все по дефолту....
    --
    еще как вариант поискать решение во вреймворках
     
  3. Abliganto

    Abliganto Постоялец

    Регистр.:
    30 ноя 2009
    Сообщения:
    111
    Симпатии:
    46
    Как вариант можно попробывать serialize() -> unserialize() правда некоторые классы могут при сериализации реализовывать интерфейсы __sleep __wakeup и делать там ненужные вещи :)

    но сразу говорю - подобное клонирование - это плохая затея ;)
     
Статус темы:
Закрыта.