Я хочу предотвратить прямую установку атрибута модели из внешнего источника без прохождения через сеттеры, которые контролируют логику.
class Person extends Model
{
public function addMoney($amount)
{
if ($amount <= 0) {
throw new Exception('Invalid amount');
}
$this->money += $amount;
}
public function useMoney($amount)
{
if ($amount > $this->money) {
throw new Exception('Invalid funds');
}
$this->money -= $amount;
}
}
Нельзя допускать:
$person->money = -500;
Вы должны использовать какой-то метод доступа или установки:
$person->useMoney(100);
Но мне все равно, как вы получите значение:
echo $person->money;
// or
echo $person->getMoney();
// whatever
Как сделать так, чтобы единственный способ обновить этот атрибут — использовать определенные методы, которые диктуют некоторую дополнительную логику? В некотором смысле сделать атрибут модели закрытым или защищенным.
Я хочу сделать это отдельно и/или до того, как данные модели будут сохранены в базе данных.