PHP数组没有推送元素

时间:2015-02-05 18:12:25

标签: php arrays curl

我有以下代码:

$mh = curl_multi_init();
$requests = array();

addSentimentHandle ( 'Hello', $requests );
addSentimentHandle ( 'Hello :)', $requests );

function addSentimentHandle($tweet, $requests) {
    $url = makeURLForAPICall($tweet);
    array_push($requests, curl_init ($url));
    print_r($requests);
}

我希望$requests数组包含两个元素,但这是输出:

Array ( [0] => Resource id #8 ) Array ( [0] => Resource id #9 )

为什么要创建2个数组而不是第二个项目被推入同一个数组?

1 个答案:

答案 0 :(得分:2)

我认为您的问题是您希望将$ requests用作全局变量。 在你的代码中,它不是。 你应该把它作为参考传递:

$mh = curl_multi_init();
$requests = array();

addSentimentHandle ( 'Hello', $requests );
addSentimentHandle ( 'Hello :)', $requests );

function addSentimentHandle($tweet, &$requests) {
    $url = makeURLForAPICall($tweet);
    array_push($requests, curl_init ($url));
    print_r($requests);
}

请注意'&'作为函数声明中$ requests的前缀。然后php不会将它用作此函数中的局部变量。

我建议你使用php作为面向对象的语言。

class myAwesomeTweeterClass{
 protected $_requests;

 public function __construct(){
  $this->_requests = array();
 }

 public function addSentimentHandle($tweet) {
    $url = makeURLForAPICall($tweet);
    array_push($this->_requests, curl_init ($url));
 }
 public function getRequests(){
    return $this->_requests;
 }
}
$mh = curl_multi_init();
$obj = new myAwesomeTweeterClass();
$obj->addSentimentHandle ( 'Hello');
$obj->addSentimentHandle ( 'Hello :)');
print_r($obj->getRequests());