我对面向对象编程中的一些问题还不是很明白,我将使用虚构的 Stack Overflow 理解来看看是否能得到帮助。
所以,在这个页面上我们有一个问题。您可以对问题发表评论。还有答案。您可以对答案发表评论。
Question
- comment
- comment
- comment
Answer
-comment
Answer
-comment
-comment
-comment
Answer
-comment
-comment
所以,我想象中这种系统的高级理解(在PHP中,而不是.Net,因为我还不熟悉.Net)应该是这样的:
$question = new Question;
$question->load($this_question_id); // from the URL probably
echo $question->getTitle();
为了加载答案,我想应该是这样的(“ A”):
$answers = new Answers;
$answers->loadFromQuestion($question->getID()); // or $answers->loadFromQuestion($this_question_id);
while($answer = $answers->getAnswer())
{
echo $answer->showFormatted();
}
或者,您可以选择执行“B”操作:
$answers->setQuestion($question); // inject the whole obj, so we have access to all the data and public methods in $question
$answers->loadFromQuestion(); // the ID would be found via $this->question->getID() instead of from the argument passed in
while($answer = $answers->getAnswer())
{
echo $answer->showFormatted();
}
我想我的问题是,我不知道何时或是否应该传递整个对象,以及何时只需传递值。传递整个对象给我很大的灵活性,但它需要更多的内存,并且可能会受到更改的影响(例如属性或方法重命名)。如果“ A”风格更好,为什么不使用函数?面向对象编程在这里似乎是无意义的。
谢谢, 汉斯
$question->getComments()
是一个很好的实用工具,可能只是调用了Comment::forQuestion($this->id)
。当然,你应该测试这两种方法。 - jasonbar