Sobes.tech
Back to questions
Junior — Middle
91

Обладает ли класс иммутабельностью, если у него есть открытое свойство?

Answer from AI

sobes.tech AI

Если у класса есть открытое (public) свойство, то он не считается иммутабельным, потому что внешние объекты могут напрямую изменить значение этого свойства после создания объекта.

Иммутабельность означает, что состояние объекта нельзя изменить после его создания. Для этого все свойства обычно делают приватными или защищёнными, а изменения возможны только через методы, которые возвращают новый объект с изменённым состоянием.

Пример иммутабельного класса в PHP:

class ImmutableUser {
    private string $name;

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

    public function getName(): string {
        return $this->name;
    }

    public function withName(string $name): self {
        return new self($name);
    }
}

Здесь свойство $name закрыто, и изменить его можно только создав новый объект через метод withName.