Ну через клон будет правильно
Вообще конструктор будет не лишним
Сохранить стандартное значение можно в свойстве и при желании его дергать
Все свойства должны быть приватными или защищенными
Если кодом, то есть варианты иммутабельности
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));
}
}
Далее уже работать через метод, либо делать методы которые возвращают новый объект