Что было бы хорошим способом (вместе с любыми плюсами и минусами) инициализации экземпляра класса 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 ответов предлагали что-либо, но я подожду немного дольше, прежде чем выбирать лучший, на случай, если мои вопросы были просто неясно.