Anon3363
@Anon3363

Как клонировать обьект?

interface IObject{
 	function cloner();
 	// function equals();
}

class Uxxankyun implements IObject{
	// public $a;
	// public $b;
	 public function __construct($a,$b){
		$this->a = $a;
		$this->b = $b;
	}
	public function cloner(){
		
	}
}

$u1 = new Uxxankyun(4,5);
$u2 = $u1->cloner();
$u1->a = 8;
print $u2->a;

как написать функцию чтобы вернул клон $u1
  • Вопрос задан
  • 74 просмотра
Решения вопроса 2
Maksclub
@Maksclub Куратор тега PHP
maksfedorov.ru
Ваш пример скорее сего в методе copy1(), но вдруг и другие понадобятся:
<?php

class Any
{
    private $a;
    
    public function __construct(string $a)
    {
        $this->a = $a;
    }
    
   // Простое клонирование 1 в 1
    public function copy1(): self
    {
        return clone $this;
    }
    
    // Для примера, как сделать похожий объект на основе состояния текущего объекта
    public function copy2(): self
    {
        $new = new self($this->a);
        // тут делаем еще что-либо
        // $new->a тут доступна напрямую

        return $new;
    }
    
    // Меняем состояние и возвращаем новый объект, иммутабельное поведение
    // хорошая практика
    public function withNewA(string $a): self
    {
        $new = clone $this;
        $new->a = $a;

        return $new;
    }
}

$any = new Any("A");

var_dump($any === $any->copy1());  // false
var_dump($any === $any->copy2());  // false
var_dump($any === $any->withNewA('B'));  // false, изменили объект, но получили новый, а не измененный старый

sandbox.onlinephpfunctions.com/code/30bb3f1fb842ef...
Ответ написан
glaphire
@glaphire Куратор тега PHP
PHP developer
Почитайте примеры внимательно
клонирование объектов в php
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы