3

返信制限付きのコメントシステムを作りたいです。例えば:

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

したがって、コメントごとに 1 つの応答ツリーがあります。そして最後に、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 設計が生じるかを確認しようとします。私が見る限り、あなたは 3 つの識別可能なオブジェクトを持っているように見えます: コメントするオブジェクト、第 1 レベルのコメント、および第 2 レベルのコメントです。

  • コメントするオブジェクトには、第 1 レベルのコメントのリストがあります。
  • 第 1 レベルのコメントは子コメントを持つことができます。
  • 第 2 レベルのコメントは子を持つことができません。

したがって、次のモデル化から始めることができます。

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 に答える