Геттер

Оригинальное название: getter

Коротко

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

Что такое «Геттер»

Если свойство объекта открыто, любой код может прочитать и изменить его как угодно. Геттер ставит между полем и внешним миром метод: снаружи видно только «получить цену», а как она хранится и считается — внутреннее дело класса. Это основа инкапсуляции. Парный метод для записи значения — сеттер; о том, как проверять и изменять данные при записи, рассказано в статье о нём.

Геттеры в PHP и JavaScript

В PHP традиционно пишут методы с префиксом get: getPrice(), getName(). Так устроены многие библиотеки и ORM, в том числе объекты D7 в 1С-Битрикс. Магический метод __get() перехватывает обращение к несуществующему или закрытому свойству, но злоупотреблять им не стоит: IDE и анализаторы кода не видят таких свойств. В PHP 8.4 появились хуки свойств — геттер можно объявить прямо у свойства, без отдельного метода. В JavaScript для этого есть ключевое слово get в классах и объектах: метод вызывается при обычном чтении свойства, без скобок.

Пример вычисляемого свойства

class CartItem {
  constructor(price, qty) {
    this.price = price;
    this.qty = qty;
  }
  get total() {
    return this.price * this.qty;
  }
}

const item = new CartItem(1500, 3);
item.total;   // 4500 — читается как свойство, но считается при обращении

Сумма не хранится отдельно и не может «разойтись» с ценой и количеством: при изменении qty следующий вызов item.total вернёт новое значение. Это и есть главный плюс геттера перед простым свойством объекта.

Чего не стоит делать в геттере

  • Менять состояние. Чтение не должно ничего записывать, отправлять или увеличивать счётчики — иначе простой вывод значения в отладчике меняет поведение программы.
  • Выполнять тяжёлую работу без кеша. Геттер выглядит как дешёвое обращение к полю, и его могут вызвать в цикле тысячу раз. Если внутри запрос к базе или API, результат стоит запомнить.
  • Писать геттер к каждому полю «на всякий случай». Если метод просто возвращает поле и больше ничего не делает, он добавляет код, но не добавляет защиты; в PHP для данных только для чтения есть свойства readonly.

Обновлено:

Все термины раздела «Backend»

Что будем искать? Например,Продвижение