Sobes.tech
Back to questions
Junior — Middle
89

Каким образом можно обеспечить неизменяемость класса, если он содержит публичные свойства?

Answer from AI

sobes.tech AI

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

Основные подходы:

  • Сделать свойства readonly (если язык поддерживает), чтобы их можно было установить только при инициализации.
  • Использовать приватные свойства с публичными геттерами и без сеттеров.
  • Если свойства публичные и изменяемые, можно возвращать копии объектов (для сложных типов), чтобы внешние изменения не влияли на внутреннее состояние.

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

class ImmutableClass {
    public readonly string $name;
    public readonly int $age;

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

Если версия PHP не поддерживает readonly, можно сделать свойства приватными и добавить только геттеры:

class ImmutableClass {
    private string $name;
    private int $age;

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

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

    public function getAge(): int {
        return $this->age;
    }
}

Таким образом, после создания объекта изменить свойства нельзя.