2012-08-30 51 views
0

試圖挖掘面向對象的PHP。我有一個遞歸方法來返回評論和他們的答覆,並將它們編譯成一個平面陣列$comments_list面向對象的PHP,從方法返回時數組爲null null

<?php 

class RedditPosts 
{ 
    public function get_post_ids($from, $limit) 
    { 
     // GET POSTS 
     $list = json_decode(file_get_contents("http://www.reddit.com/$from.json?limit=$limit")); 
     sleep(2); //after every page request 

     $post_ids = array(); 
     foreach($list->data->children as $post) { 
      $post_ids[] = $post->data->id; 
     } 
     return $post_ids; 
    } 
} 

class RedditComments 
{ 
    static $comments_list = array(); 

    public function get_comments($post_id) 
    { 
     $comments_object = json_decode(file_get_contents("http://www.reddit.com/comments/$post_id.json")); 
     sleep(2); 

     $top_comments = $comments_object[1]->data->children; 
     //var_dump($top_comments); 
     self::get_sub_comments($top_comments); 
    } 

    static function get_sub_comments($root_comments) 
    { 
     foreach($root_comments as $comment) 
     { 
      self::$comments_list[] = $comment; 
      //echo $comment->data->body . "<br/>" 

      if ($comment->data->replies != '') 
      { 
       self::get_sub_comments($comment->data->replies->data->children); 
      } 
     } 
     var_dump(self::$comments_list); 
     return self::$comments_list; 

    } 
} 

/******************************MAIN************************************/ 

$ps = new RedditPosts(); 
$my_posts = $ps->get_post_ids("r/learnprogramming", 2); 

$cm = new RedditComments(); 
$my_comments = $cm->get_comments($my_posts[0]); 
var_dump($my_comments); 

?> 

我做了正確的var_dump返回之前,它被填充並且看起來是正確的,但是當我把它叫做法外爲null。可能是一個範圍問題,但我是新來的,無法弄清楚我在哪裏和我碰到了牆。幫助讚賞!

+0

當您使用靜態方法時,它不是真正的OOP。只是你用程序語法編寫的程序代碼,乍一看模仿面向對象的代碼。 –

回答

1

您不會從get_post_ids返回任何內容。 self::get_sub_comments($top_comments);應該是self::get_sub_comments($top_comments);

+1

AHH,我試圖從'get_sub_comments'而不是'get_comments'返回。它現在起作用了,我覺得自己像個白癡。我需要休息。謝謝! – pdizz