Answer the question
In order to leave comments, you need to log in
How to clone an object?
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;
Answer the question
In order to leave comments, you need to log in
Your example is more like this in the copy1 () method, but suddenly others will be needed:
<?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, изменили объект, но получили новый, а не измененный старый
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question