A
A
Anon33632020-05-03 18:48:17
PHP
Anon3363, 2020-05-03 18:48:17

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;

how to write a function to return a clone of $u1

Answer the question

In order to leave comments, you need to log in

1 answer(s)
M
Maksim Fedorov, 2020-05-03
@Anon3363

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, изменили объект, но получили новый, а не измененный старый

sandbox.onlinephpfunctions.com/code/30bb3f1fb842ef...

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question