我想建立一个回复有限的评论系统。
例如:

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

所以每个评论都有一个回复树。
最后,我想这样使用它,假设我在$comments数组中有来自db的对象:
foreach($comments as $comment)
{
    echo $comment->text;

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

所以我想我需要创建另一个对象,但不知道如何使它全部工作。我应该用stdclass还是别的什么?
提前谢谢。

最佳答案

总的来说,我试着解决这个问题来理解它,看看什么类型的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;
     }
}

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

关于php - 构建对象注释树,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13146478/

10-12 12:46
查看更多