我的头等舱 - 计算Twitter反应

时间:2011-09-16 20:58:18

标签: php oop

我正在开设一个课程,该课程会计算Twitter对链接的反应并显示它们。

目前我正在计算计数部分,即使在构造函数中创建的数组有多个元素,我的计数总是等于0。

任何帮助将不胜感激。感谢。

<?php
    class TwitterReactions{

        function __construct($url){
            if($url){
                $output=array();
                $query = 'http://search.twitter.com/search.json?q='.$url;
                $reactions=file_get_contents($query);

                $reactions_array=json_decode($reactions, TRUE);

                foreach($reactions_array as $results){
                    foreach($results as $result){
                        $output['user'][]=$result['from_user'];
                        $output['image'][]=$result['profile_image_url'];
                        $output['message'][]=$result['text'];
                        $output['date'][]=$result['created_at'];
                    }
                }
                return $output['user'];

            } else {
                echo "<p>Please provide a url...</p>";
            }
        }

        function count_reactions($output){
            //print_r($output);
                $count = count($output['user']);
                return $count;
        }
    }
?>

2 个答案:

答案 0 :(得分:2)

您可能希望将$ output数组作为类的属性。那么$ this-&gt;输出将在count_reactions方法中获得。

<?php
class TwitterReactions {

    public $output;

    function __construct($url){
        if($url){
            $output=array();
            $query = 'http://search.twitter.com/search.json?q='.$url;
            $reactions=file_get_contents($query);

            $reactions_array=json_decode($reactions, TRUE);

            foreach($reactions_array as $results){
                foreach($results as $result){
                    $output['user'][]=$result['from_user'];
                    $output['image'][]=$result['profile_image_url'];
                    $output['message'][]=$result['text'];
                    $output['date'][]=$result['created_at'];
                }
            }
            $this->output = $output;
            return $output['user'];

        } else {
            echo "<p>Please provide a url...</p>";
        }
    }

    function count_reactions($output){
        //print_r($this->output);
            $count = count($this->output['user']);
            return $count;
    }
}

答案 1 :(得分:2)

我同意Aliaksandr Astashenkau在回答中的一些内容,但课程仍然存在一些问题。

在我看来,您最初的问题是您希望__construct返回$ output,然后您将创建的对象传递给count_reactions()方法。像这样......

$twitter = new TwitterReactions($url);
$count = $twitter->count_reactions($twitter);

您没有调用已发布的count_reactions()方法,所以这只是一种预感。如果这就是你使用它的方式,那么构造函数并不意味着以这种方式使用它。构造函数始终返回类的新实例。您不能从构造函数返回任何其他类型的值。 您无法在__construct方法中使用return关键字。

正如Aliaksandr Astashenkau指出的那样,产出应该是一个集体成员。我也会让$ count成为一名班级成员。在这种情况下,没有太多的要点是私有的,所以你真的不需要访问器方法,但如果你愿意,你可以包括它们。

我会让这个课程像这样......

<?php

class TwitterReactions
{
    public $url = '';
    public $output = array();
    public $count = 0;

    function __construct($url)
    {
        $this->url = $url;

        $query = 'http://search.twitter.com/search.json?q='.$url;
        $reactions=file_get_contents($query);
        $reactions_array=json_decode($reactions, TRUE);

        foreach($reactions_array as $results)
        {
            foreach($results as $key => $result)
            {
                // I find it easier if the data is arranged by each tweet but you can keep the array structure how you have it.
                $this->output[$key]['user'] = $result['from_user'];
                $this->output[$key]['image'] = $result['profile_image_url'];
                $this->output[$key]['message'] = $result['text'];
                $this->output[$key]['date'] = $result['created_at'];
            }
        }

        $this->count = count($this->output);
    }
}

然后你可以使用像这样的类

$twitter = new TwitterReactions($url);
// you now have access to output directly
$twitter->output;
// and count
$twitter->count;

无论如何有很多方法可以完成同样的事情,但我跳这有助于给你一些想法。