@alexh7854

Зачем делать поле приватным а затем создавать для него геттер и сеттер?

Здравствуйте.

Встречал в примерах кода и уроках класс / объект в котором создаются приватные поля, а затем для этих полей создаются геттеры и сеттеры.

Для чего это нужно?
Для валидации в сеттерах, для более удобного автодополнения в IDE?
  • Вопрос задан
  • 560 просмотров
Решения вопроса 1
Zoominger
@Zoominger
System Integrator
Для безопасности, чтобы никто не мог просто так поменять переменную.
Для того, чтобы другой программист, который будет пользоваться этим кодом, не смог выстрелить себе в ногу.
Для валидации, да.
Да и вообще, это хорошая практика.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 4
@abmanimenja
Это не нужно делать, если геттеры/сеттеры ничего не делают, кроме как изменяют поле.
И ничего не будут делать в будущем.

Это плохая практика, лишнюю работу себе создаешь. То есть пишешь код ради того, чтобы писать код.

А вот если ты нагружаешь геттеры/сеттеры дополнительными функциями, кроме собственно изменения переменной, или сейчас или предвидишь, что это будет сделано в будущем - то тогда другое дело.

Нужно думать - когда надо и когда не надо.
Ответ написан
Например такой код, гарантирует что в option будет экземпляр объекта Example
class Test{
  private $option;
  getOption():Example{
    return $this->option
  }
  setOption(Example $option){
    $this->option=$option;
  }
}

А в целом, закрытие свойств и получение их через гетеры, это инкапсуляция, мы закрываем свойства и открываем методы, давая клиентскому коду некий интерфейс для работы с классом
Ответ написан
Комментировать
@d-stream
Готовые решения - не подаю, но...
Тупой пример:
есть поля цена, количество, сумма

при наличии геттеров и сеттеров - можно
- во-первых при изменении цены или количества пересчитать сумму
- во-вторых инициировать "переотображение" новой суммы
- в-третьих когда-то в будущем в том числе выполнить какие-то расчеты косвенных данных типа скидок по сетке, стоимости доставки и т.п.

притом это не потребует выискивать все места где идет присвоение значения полю (потому что все в сеттере)
Ответ написан
Комментировать
mosesfender
@mosesfender
Меланхолик, параноик, падал с коек
Опять же, иногда чтобы установить значение в свойство объекта, нужно произвести с входным значением ряд манипуляций, иногда нужно возбуждать события. А где это сделать удобно как не в сеттере?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы