2

タイトルがわかりにくい場合は申し訳ありませんが、すべてのコメントとその返信を再帰関数で取得しようとしています。問題は、最上位のコメント オブジェクトがコメントとは異なるデータ構造を持っていることです。最上位のコメントは からアクセスされ$comment_object->data->children、すべてのコメントへの返信は からアクセスされ$comment->data->repliesます。これは私がこれまでに持っているものです:

public function get_top_comments()
{
    $comments_object = json_decode(file_get_contents("http://www.reddit.com/comments/$this->id.json"));
    sleep(2); // after every page request

    $top_comments = array();
    foreach ($comments_object[1]->data->children as $comment)
    {
        $c = new Comment($comment->data);
        $top_comments[] = $c;
    }
    return $top_comments;
}

public function get_comments($comments = $this->get_top_comments) //<-- doesn't work
{
    //var_dump($comments);

    foreach ($comments as $comment)
    {
        if ($comment->data->replies != '')
        {
            //Recursive call
        }
    }
}

再帰関数のデフォルトのパラメータとして割り当てようとしまし$comments = $this->get_top_commentsたが、PHP はこれをサポートしていないのでしょうか? 異なる構造を分離するために、関数内で if-else ブロックを使用する必要がありますか?

4

1 に答える 1

3

get_comments()asのデフォルト値を持っているだけでNULL、それがnullかどうかを確認します。そうである場合は、トップのコメントを使用してください。とにかく、渡されたコメントをそのままにしたくありませNULLん。

public function get_comments($comments = NULL)
{
    //var_dump($comments);

    if (is_null($comments))
        $comments = $this->get_top_comments;

    foreach ($comments as $comment)
    {
        if ($comment->data->replies != '')
        {
            //Recursive call
        }
    }
}

これは、PHP ドキュメントの1 つの例がそれを行う方法です。ドキュメントの次のコメントに注意してください。

デフォルト値は、変数、クラス メンバー、関数呼び出しなどではなく、定数式である必要があります。

于 2012-09-09T20:38:27.967 に答える