面向对象的设计:返回值还是设置属性?

时间:2011-02-03 16:14:33

标签: php oop

在这种情况下,什么被视为“最佳做法”。我有一个收集远程资源的课程,看起来有点像这样:

class Gather {
    public function getAll($locations) {
        $results = array('All','My','Results');
        return $results;
    }
}

我的问题是,返回结果或将其作为财产分配是否被视为最佳做法?即

// This
$results = $gatherer->getAll();
// vs This
$gatherer->getAll(); // now $gatherer->results can be used

我很可能只是在思考这个问题,但我没有接受过正式的培训,我想知道是否有更“正确”的做法。

2 个答案:

答案 0 :(得分:6)

毫无疑问,第一个($ results = $ gatherer-> getAll())是首选。原因是价值与其来源之间的关系是明确的。在第二种情况下,读者不清楚$ gatherer->结果是否通过调用getAll()来填充。也许它来自其他一些电话,或者它总是在那里,或由外部来电者设定。

这也使读者更容易追踪以理解呼叫。当getResults()返回值时,很明显他们的读者应该阅读getResults()的实现来查看它的来源。

答案 1 :(得分:1)

我最近一直在努力解决这个问题。在第二个版本

$gatherer->getAll(); // now $gatherer->results can be used

我会将您的命名约定更改为

$gatherer->initResults();

然后很明显,结果是$ gatherer的属性。您甚至可以像这样定义$ gatherer-> initResults():

public function initResults() {
    $this->results = $this->getAll();
}

public function getAll() {
    // do whatever to get results
}

那么,您可以使用任何一种形式。

很抱歉,我知道这更像是一个评论,然后是一个答案,但它的代码很重,几乎不可读作为评论。