Логика в геттере возможна ли?

Есть геттер, дающий бонус 20% к хп, если страна - Беларусь, применяется так:
// геттер сущности Test для примера
$this->hp = 100; // берётся из БД

public function getHp(): int
{
    return $this->country_code == 'by' ? $this->hp * 1.2 : $this->hp;
}

// где-то в дебрях для примера
public function test(Test $test)
{
    $test->hp = $test->getHp() - 20;
    $test->save(); // пишем 80, если Беларусь - 100
}

Просто пишут везде "гуру Ларавеля", что не должно быть логики в гетерах-сеттерах.

Могу ли я делать такой геттер ну вот в данном случае?
Если нет, то почему?
  • Вопрос задан
  • 320 просмотров
Решения вопроса 3
@Nc_Soft
Просто это не getter, а decorator.
Ответ написан
toxa82
@toxa82
Я бы предпочел засеттить нужное увеличенное значение один раз, а не каждый раз умножать при чтении.
Ответ написан
Комментировать
Maksclub
@Maksclub Куратор тега PHP
maksfedorov.ru
Нет

Геттеры могут быть в транспортных классах и иногда в инфраструктурных/библиотечных.

Иначе это нарушение инкапсуляции: открывают доступ к тому, что закрыли. Как и сеттеры — дают доступ к тому, что закрыто, но на запись.
Крч чит, хотя соответствуют определению инкапсуляции и дату-хиддингу

Геттеры повышают связанность системы из-за открытой доступности данных модуля/класса, именно возможностью заюзать знания о состоянии, что в средних и больших, а иногда и в простых, на ровном месте усложняет код
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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