我正在开设一个课程,该课程会计算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;
}
}
?>
答案 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;
无论如何有很多方法可以完成同样的事情,但我跳这有助于给你一些想法。