我一直在使用php进行编码并使用codeigniter,从来没有得到过getter和setter的概念。这是什么意思?
答案 0 :(得分:3)
class Foo
{
protected $_bar;
public function setBar($value) {
$this->_bar = $value;
}
public function getBar()
{
return $this->_bar;
}
}
此处的getter和setter是允许访问受保护属性$_bar
的方法。我们的想法不是直接允许访问该属性,而是通过API控制对其的访问,以供您的客户端代码使用。通过这种方式,您可以更改基础状态,同时保持面向公众的方法不变。因此,如果发生变化,您不太可能破坏客户端。
拥有它们的另一个原因是,在获取或设置属性之前需要添加逻辑。例如,setter可能会验证值并将值设为大写
public function setBar($value)
{
if(!is_string($value)) {
throw new InvalidArgumentException('Expected String');
}
$this->_bar = strtoupper($value);
}
或者getter可能懒惰实例化某个对象
public function getBar()
{
if($this->_bar === NULL) {
$this->_bar = new Bar;
}
return $this->_bar;
}
有些人批评getter和setter作为样板代码,特别是如果他们不做任何事情而不是直接设置/获取他们提供访问的属性。但这个讨论超出了范围。
了解更多相关信息