Как сохранить в переменную объект с другим свойством не изменяя объект?

Здравствуйте, есть код:
class test {

    public $var = 'variable';

    public function setVar($param) {
        $this->var = $param;
    }

}

$Obj = new test();
$str = $Obj->setVar('new variable');


Я что-то туплю, как в переменную $str сохранить объект с измененным свойством не затронув оригинал?

Конечно, можно сделать так:
$Obj = new test();
$Obj2= clone $Obj;
$str = $Obj2->setVar('new variable');

Но, так нельзя)) Что-то в самом методе сделать? Пробовал статическим метод сделать, но...

На конструктор и модификаторы доступа не обращайте внимание.
  • Вопрос задан
  • 142 просмотра
Пригласить эксперта
Ответы на вопрос 2
Compolomus
@Compolomus Куратор тега PHP
Комполом-быдлокодер
Ну через клон будет правильно
Вообще конструктор будет не лишним
Сохранить стандартное значение можно в свойстве и при желании его дергать
Все свойства должны быть приватными или защищенными
Если кодом, то есть варианты иммутабельности
class Test
{
    private $array = [];

    public function __construct(array $array)
    {
        $this->array = $array;
    }

    public function immutable(): self
    {
        return clone $this;
    }

    public function limit(int $limit, int $offset = 0): self
    {
         return new self(array_slice($this->array, $offset, $limit));
    }
}

Далее уже работать через метод, либо делать методы которые возвращают новый объект
Ответ написан
Комментировать
@ramiloremispum
Backend Web-dev
В частном случае можно в методе создать новый объект:
class test {

    public $var = 'variable';

    public function setVar($param) {
        $self = new self();
        $self->var = $param;
        return $self;
    }

}

$Obj = new test();
$Obj2 = $Obj->setVar('new variable');

echo $Obj->var;
echo $Obj2->var;
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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