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;
}
}
Таким образом, после создания объекта изменить свойства нельзя.