Автор Тема: копирование класса  (Прочитано 2866 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Altaxar

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 222
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.moroseac.ru/
копирование класса
« : 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 создавать, тоесть через рекурсию все копировать.
Как посоветуете сделать?
« Последнее редактирование: 07 Июня 2007, 16:26:35 от Altaxar »
Не все является тем чем кажется.

Оффлайн hanslinger

  • H2Oer
  • Ветеран
  • *****
  • Сообщений: 1148
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.orava.ru
копирование класса
« Ответ #1 : 07 Июня 2007, 16:53:14 »
3) Идея сделать через clone еще есть.

Оффлайн Altaxar

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 222
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.moroseac.ru/
копирование класса
« Ответ #2 : 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);
}
« Последнее редактирование: 07 Июня 2007, 18:33:09 от Altaxar »
Не все является тем чем кажется.

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28