我应该使用public setter在类中设置私有属性值吗?

时间:2013-01-08 15:50:03

标签: php oop class coding-style refactoring

假设我有一个类Test,它有一个名为$_list的私有属性和一个公共设置器。
公共setter用于从外部设置属性值。

class Test {
    private $_list;

    public function getList() {
        return $this->_list;
    }

    public function setList($list) {
        $this->_list = $list;
    }

    public function initialize() {
        $list = array();

        /* ... Some code that fills the $list with values etc. ... */

        // 1) Set value directly
        $this->_list = $list;

        // 2) Use public setter
        $this->setList($list);
    }
}

问题是 - 我是否需要使用公共setter在类中设置私有属性值?
哪种方式更好 - #1还是#2?为什么呢? 你更喜欢哪种方式? 我希望看到一个完整的答案,解释每种方式的优缺点。

感谢。

1 个答案:

答案 0 :(得分:1)

如上所述,两者都是可以接受的,但正确的答案是:使用直接属性访问,但有时你最好使用setter。

1号,(物业访问)优点:

  • 易于阅读且速度更快
  • 为您提供这是对象的简单属性的方法

2号,(设定者)优点:

  • 您可以对设置属性执行自定义操作(例如,初始化其他属性,缓存或调用参数对象上的方法)
  • 您将属性视为类的子元素,可以实现自己的逻辑。

我认为提出使用变量背后没有逻辑更为重要。 如果简单,请使其看起来很简单。如果不是,您仍然可以使用setter。

您也可以询问有关获取者与财产访问的相同内容,以上也适用。