首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >面向对象设计:返回值还是设置属性?

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

Stack Overflow用户
提问于 2011-02-04 00:14:33
回答 2查看 1.1K关注 0票数 3

在这种情况下,什么被认为是“最佳实践”。我有一个收集远程资源的类,它看起来有点像这样:

代码语言:javascript
运行
复制
class Gather {
    public function getAll($locations) {
        $results = array('All','My','Results');
        return $results;
    }
}

我的问题是,返回结果或将其作为属性分配是否被认为是最佳实践?即。

代码语言:javascript
运行
复制
// This
$results = $gatherer->getAll();
// vs This
$gatherer->getAll(); // now $gatherer->results can be used

这很可能是我想得太多了,但我没有接受过正式的培训,我想知道是否有“更正确”的方法来做这样的事情。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-02-04 00:18:33

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

这也使读者更容易通过跟踪来理解调用。当getResults()返回值时,很明显读者应该阅读getResults()的实现,看看它来自哪里。

票数 6
EN

Stack Overflow用户

发布于 2013-01-10 04:02:42

我最近一直在努力解决同样的问题。在第二版中

代码语言:javascript
运行
复制
$gatherer->getAll(); // now $gatherer->results can be used

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

代码语言:javascript
运行
复制
$gatherer->initResults();

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

代码语言:javascript
运行
复制
public function initResults() {
    $this->results = $this->getAll();
}

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

因此,您可以使用这两种形式中的任何一种。

对不起,我知道这更多的是一个评论而不是一个答案,但它的代码太多了,以至于作为一个评论实际上是无法阅读的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4888602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档