Forum Webscript.Ru

Программирование => PHP => Тема начата: Altaxar от 07 Июня 2007, 15:33:09

Название: копирование класса
Отправлено: Altaxar от 07 Июня 2007, 15:33:09
Переносил сайт с PHP4 на PHP5.
при $a- class ; $b=$a - то в PHP4 копирует класс, а PHP5 присваивает сылку на класс.
Мне нужно копировать класс, тоесть его глобальные переменные и также внутренние классы, а как это сделать под PHP5? и чтобы под PHP4 также работало.
1) Идея сделать через serialize() и unserialize(), но может есть более быстрый способ сделать копию класса?
2) сделать $b=new ... , а затем через foreach($a as $key => $val) $b[$key]=$val; или еще както, в данном случае прийдется еще и внутренние классы тоже через new создавать, тоесть через рекурсию все копировать.
Как посоветуете сделать?
Название: копирование класса
Отправлено: hanslinger от 07 Июня 2007, 16:53:14
3) Идея сделать через clone еще есть.
Название: копирование класса
Отправлено: Altaxar от 07 Июня 2007, 18:22:43
3) идея понравилась, но PHP4 на идею ругается :-) . PHP4, clone вообще видеть не хочет, "Parse error" выдает.
немного подумал и закинул clone в анонимную функцию :-)
и вот что получилось:
(закинул в класс который собираюсь клонировать)

function my_clone(){
return version_compare("5.0.0", phpversion(),"<")?$this->newfunc():$this;
}
function newfunc(){
$newfunc = create_function(\'$a\',\'return clone $a;\');
return $newfunc($this);
}