我想建立一个回复有限的评论系统。
例如:
#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/