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