Наличие свойства stati c прекрасно работает, если конструктор должен вызываться каждый раз. Однако если вы пытаетесь объединить вызовы в цепочку, вместо этого вы можете использовать clone
.
class Foo
{
public $bar = 1;
public function bar(?int $bar = null): Foo
{
$this->bar = $bar ?? $this->bar;
return $this;
}
public function copy(?int $bar = null): Foo
{
return $this->fork()->bar($bar ?? $this->bar);
}
public function fork(): Foo
{
return clone $this;
}
}
$a = new foo();
$a2 = $a->copy();
$b = $a->copy(2);
$b2 = $a->copy();
$c = $b->copy(3);
$c2 = $b->copy();
https://3v4l.org/Fevli
Примечание. Также есть __clone()
magi c метод, который позволяет вам настроить фактические клонированные свойства, которые go (например, сброс или приращение и т. Д. c).