2011-02-03 14 views
3

この場合、 "ベストプラクティス"とは何が考えられますか?私は、リモートリソースを集めていたクラスを持っている、それは少し次のようになります。オブジェクト指向設計:戻り値またはプロパティを設定しますか?

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 

そのかなりありそう私はちょうどこれをoverthinkingんだけど、私は正式な訓練を得なかったし、このような何かを行うための「より正しい」方法がある場合、私は思ったんだけど。

答えて

6

質問はありませんが、最初のもの($ results = $ gatherer-> getAll())が優先されます。その理由は、値とその出所との関係が明示的であるからです。後者の場合、$ gatherer->結果はgetAll()の呼び出しによって生成されることは読者には分かりません。たぶんそれは他の電話から来たのかもしれないし、いつもそこにいるか、外の発信者が設定しているかもしれない。

これにより、読者が通話を理解するためにトレースするのが容易になります。 getResults()が値を返すとき、読者はgetResults()の実装を読んでどこから来たのかを調べるべきです。

+0

私は同意します。代わりに、結果がGatherインスタンスに「属し」、Gatherオブジェクトが後続の処理を実行する場合にのみ優先されます。 –

+0

1+これを少し軽減することができます: $ gatherer-> loadAll(); $ gatherer-> results; しかし、このフォームを使用する必要があるのはごくまれです。 – frogstarr78

1

私は最近この同じ問題に取り組んできました。

$gatherer->getAll(); // now $gatherer->results can be used 
番目のバージョンでは、私はそれから結果が$採集の財産であることは明らかです

$gatherer->initResults(); 

にあなたの命名規則を変更します。あなたも、そうのような)($ gatherer-> initResultsを定義することができます。

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

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

それでは、あなたはどちらの形式を使用することができます。

申し訳ありませんが、これはコメントのほうが多く、答えが分かりましたが、コードが重かったので、コメントとしてはほとんど読めませんでした。

関連する問題