Как инициализировать экземпляр класса PHP с помощью другого экземпляра объекта?

Что было бы хорошим способом (вместе с любыми плюсами и минусами) инициализации экземпляра класса PHP другим объектом того же класса (в идеале в PHP 4.x) ?

Здесь, в initialize () , по сути, то, что я хотел бы делать (пример очень упрощен из моего варианта использования см. ниже):

$product = new Product('Widget');
$product2 = new Product('Widget #2');
$product->initialize($product2);
echo $product->name;  // echos "Widget #2"

class Product {
 var $name;
 function __constructor($name) {
   $this->name = $name;
 }
 function initialize($product) {
   // I know this cannot be done this way in PHP. 
   // What are the alternatives and their pros & cons?
   $this = $product;  
 }
}

Я знаю, что это не может быть «хорошей практикой программирования»; Обладая более чем 20-летним опытом программирования на других языках, я немного знаю, что хорошо, а что нет. Так что, надеюсь, мы не будем зацикливаться на том, имеет ли это смысл или нет. У меня есть сценарий использования, работающий с открытым исходным кодом, который я не могу изменить, поэтому, пожалуйста, не забывайте, что мне это нужно. На самом деле я пытаюсь создать оболочку ООП вокруг какого-то действительно уродливого кода массива, спрятанного глубоко в ядре WordPress.

Я пытаюсь написать его, чтобы в будущих версиях они могли отказаться от уродливого кода на основе массивов, потому что все будут использовать новый API, который в противном случае полностью инкапсулировал эти неприятные массивы. Но для того, чтобы он работал элегантно, мне нужно уметь делать это (в PHP 4.x), и я не хочу писать код, который просто копирует свойства.

Заранее благодарим за вашу помощь.

ОБНОВЛЕНИЕ

Многие из вас предлагают клон , но если я не понимаю, это не решает вопрос. clone делает копию; не в этом суть вопроса. Вместо этого я пытаюсь заставить сконструированный объект «стать» переданным объектом. На данный момент я предполагаю, что нет способа сделать это, основываясь на том факте, что 0 из 5 ответов предлагали что-либо, но я подожду немного дольше, прежде чем выбирать лучший, на случай, если мои вопросы были просто неясно.

5
задан MikeSchinkel 30 September 2010 в 01:01
поделиться