Данная статья будет про клонирование объектов в php. Сразу приведу пример правильного кода для клонирования объектов в PHP:
<?
class User {
public $name;
public function __construct($name) {
$this->name = $name;
}
}
$user = new User("Иван");
$user2 = clone $user;
?> В этом коде, ключевое слово это clone.
Теперь более подробное объяснение.
Клонирование объектов в PHP:
Часто нам нужно сделать копию (либо клонировать) переменную либо объекта.
Когда дела идёт с переменами всё чуть проще:
$firstVar = 123; $lastVar = $firstVar; // теперь в ней тоже будет значение 123
(пример что выше может работать даже с объектами но в PHP версий 4)
Теперь неудачный пример копирования объектов:
<?
class User {
public $name;
public function __construct($name) {
$this->name = $name;
}
}
$user = new User("Иван");
echo $user->name; // Вывод: Иван
$user2 = $user;
$user2->name = "Маша";
echo $user->name; // Вывод: Маша, не смотря на то что слово "Маша" мы поставили в объект $user2
?> Отсюда и вывод, просто копировать объекты как мы это делаем с объектами не получиться, потому что получим ссылку на объект, а не его копию.
Ещё замечание: при клонирование нельзя передавать параметры в __construct;
Если вам нужно сделать какие-то действия при клонирование объекта то в PHP есть метод __clone
Вот пример использования:
<?
class User {
public $name;
public function __construct($name) {
$this->name = $name;
}
public function __clone() {
echo "Клон сработал!";
}
}
$user = new User("Иван");
$user2 = clone $user; // Вывод: Клон сработал! ( потому что сработал метод __clone)
?> Ещё кому-то может быть полезно знать как запретить клонирование, для этого нам просто нужно ставить спецификатор доступа private возле метода __clone.
<?
class User {
private function __clone() {
echo "Клон сработал!";
}
}
$user = new User;
$user2 = clone $user; // тут будет остановлен скрипт и будет показаться ошибка.
?>
Всем удачи 😉