php中的getter和setter

时间:2010-09-23 21:31:18

标签: php

我一直在使用php进行编码并使用codeigniter,从来没有得到过getter和setter的概念。这是什么意思?

1 个答案:

答案 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作为样板代码,特别是如果他们不做任何事情而不是直接设置/获取他们提供访问的属性。但这个讨论超出了范围。

了解更多相关信息