我应该创建此访问器吗?

问题描述:

所以我得到了这个示例布局。我应该创建此访问器吗?

private $_getMilk() = ''; 

public function getMilk():string { 
    return $this->_milk; 
} 

public function setMilk(string $milk) { 
    $this->_milk = $milk; 
} 

SetMilk也用于清空牛奶,这听起来很奇怪我为什么设置空字符串,如果你问牛奶。

我是否应该创建函数emptyMilk。 (asume奶属性得到很多称呼)

public function emptyMilk() { 
    $this->_milk = ''; 
} 
+3

对于记录,'private string _getMilk()='';'是无效的PHP。 –

+1

撇开Jon Stirling指出的,你已经可以通过setMilk(正如你已经指出的)清空牛奶,这非常好。另一个专门称为'emptyMilk'的功能只会增加复杂性,这在真正不需要复杂性的情况下。 – Andrew

一个单独emptyMilk()功能的好处是,它可以让你使用一个特殊的表示为一个空对象,而不是暴露的是给市民。

private $is_empty = true; 

public function getMilk(): string { 
    if ($this->$is_empty) { 
     throw new Exception("Empty milk"); 
    } 
    return $this->$_milk; 
} 

public function setMilk(string $milk) { 
    $this->is_empty = false; 
    $this->_milk = $milk; 
} 

public function emptyMilk() { 
    $this->is_empty = true; 
    $this->_milk = null; 
} 

public function gotMilk(): boolean { 
    return !$this->is_empty; 
} 

这使您可以使用$_milk的任何值,而不是使一个值特殊。

+0

使牛奶成为一个整数或浮动本来是一个更好的主意,但我忘了提到这一点。在$ this-> milk = 0或0.0上设置emptyMilk()将允许我们使用PHP函数empty(),我也可以使用它。 – WhoobWhoob