Геттер
Оригинальное название: 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.

