2 回答

TA貢獻(xiàn)1712條經(jīng)驗(yàn) 獲得超3個(gè)贊
您可以為要保護(hù)的每個(gè)成員變量重寫 set..Attribute() 函數(shù),或者您可以在 set..Attribute() 函數(shù)內(nèi)執(zhí)行驗(yàn)證,而不是使用單獨(dú)的公共方法。
class Person extends Model
{
public function addMoney($amount)
{
if ($amount <= 0) {
throw new Exception('Invalid amount');
}
if (!isset($this->attributes['money'])) {
$this->attributes['money'] = $amount;
} else {
$this->attributes['money'] += $amount;
}
}
public function useMoney($amount)
{
if ($amount > $this->money) {
throw new Exception('Invalid funds');
}
if (!isset($this->attributes['money'])) {
$this->attributes['money'] = -$amount;
} else {
$this->attributes['money'] -= $amount;
}
}
public function setMoneyAttribute($val) {
throw new \Exception('Do not access ->money directly, See addMoney()');
}
}

TA貢獻(xiàn)1794條經(jīng)驗(yàn) 獲得超8個(gè)贊
使用mutator,您的代碼應(yīng)如下所示:
class Person extends Model
{
? ? public function setMoneyAttribute($amount)
? ? {
? ? ? ? if ($amount < 0) {
? ? ? ? ? ? throw new Exception('Invalid amount');
? ? ? ? }
? ? ? ? $this->attributes['money'] = $amount;
? ? ? ? $this->save();
? ? }
? ?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;
? ? }
}
現(xiàn)在,您可以使用 $person->money = -500 ,它將引發(fā)異常。希望這可以幫助。
- 2 回答
- 0 關(guān)注
- 189 瀏覽
添加回答
舉報(bào)