3

我想制作回复有限的评论系统。例如:

#1st comment
## reply to the 1st comment
## reply to the 1st comment
#2nd comment
#3rd comment
## reply to the 3rd comment

因此,每条评论都有一个回复树。最后我想像这样使用它,假设我有来自 db 的 $comments 对象数组:

foreach($comments as $comment)
{
    echo $comment->text;

    if($comment->childs)
    {
        foreach($comment->childs as $child)
        {
            echo $child->text;
        }
    }
}

所以我想我需要创建另一个对象,但不知道如何让它全部工作。我应该使用 stdClass 还是其他东西?提前致谢。

4

1 回答 1

1

一般而言,我试图放下问题来理解它,看看从那里出现了哪种类型的 OO 设计。据我所见,您似乎有三个可识别的对象:要评论的对象、第一级评论和第二级评论。

  • 要评论的对象有一个第一级评论列表。
  • 第一级评论又可以有子评论。
  • 二级评论不能有子级。

所以你可以从建模开始:

class ObjectThatCanHaveComments
{
     protected $comments;
     ...
     public function showAllComments()
     {
         foreach ($this->comments as $comment)
         {
            $comment->show();
         }
     }
}

class FirstLevelComment
{
     protected $text;
     protected $comments;
     ...
     public function show()
     {
         echo $this->text;
         foreach ($this->comments as $comment)
         {
            $comment->show();
         }
     }
}

class SecondLevelComment
{
     protected $text;

     public function show()
     {
         echo $this->text;
     }
}

这可能是一种有效的第一种方法。如果这适用于您的问题,您可以通过创建复合来对评论进行建模来改进它,从而删除遍历评论列表和$text定义的重复代码。请注意,消息中的注释类已经是多态的show()

于 2012-10-30T20:10:43.443 回答