错误在不在对象上下文中时使用$ this

时间:2015-01-13 18:29:13

标签: php json loops

如果这是一个不正确的格式,请先在此处发布,请提前道歉。我正在使用Instagram API来提取图像。 Instagram API一次只返回1页图像,但提供分页和next_url来抓取下一页图像。当我使用下面的函数fetchInstagramAPI时,只获取第一页,php代码工作正常。

当我尝试将loopPages函数与fetchInstagramAPI函数一起使用时,为了尝试一次抓取所有页面,我收到错误“在不在对象上下文中时使用$ this”。任何的想法?感谢您的帮助。

函数fetchInstagramAPI获取我们的数据

<?php
  function fetchInstagramAPI($url){
         $ch = curl_init();
         curl_setopt($ch, CURLOPT_URL, $url);
         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
         curl_setopt($ch, CURLOPT_TIMEOUT, 20);
         $contents = curl_exec($ch);
         curl_close($ch); 
         return json_decode($contents);
    }

函数loopPages使用pagination和next_url来抓取所有图像页面

  function loopPages($url){

    $gotAllResults = false;
    $results = array();

    while(!$gotAllResults) {
    $result = $this->fetchInstagramAPI($url);
    $results[] = $result;

    if (!property_exists($result->pagination, 'next_url')) {
        $gotAllResults = true;
    } else {
        $url = $result->pagination->next_url;
    }
}

return $results;

}

这会拉动,解析,然后在浏览器中显示图像

  $all_url = 'https://api.instagram.com/v1/users/{$userid}/media/recent/?client_id={$clientid}';
  $media = loopPages($all_url);

  foreach ($media->data as $post): ?>
    <!-- Renders images. @Options (thumbnail, low_resoulution, standard_resolution) -->
    <a class="group" rel="group1" href="<?= $post->images->standard_resolution->url ?>"><img src="<?= $post->images->thumbnail->url ?>"></a>
<?php endforeach ?>

1 个答案:

答案 0 :(得分:2)

在PHP和许多面向对象的语言中$this是对当前对象(或调用对象)的引用。因为您的代码似乎不在任何类$this中,所以不存在。检查PHP类和对象的this链接。

由于您刚刚在文件中定义了函数,因此可以尝试使用$result = fetchInstagramAPI($url);调用函数(不使用$this)。

修改

对于foreach检查$media->data是否实际上是一个数组,并尝试另一种我认为更容易阅读的语法。

<强> EDIT2

由于你现在知道你的$media看起来如何可以包裹另一个遍历页面的foreach循环:

foreach ($media as $page){
  foreach ($page->data as $post) {
    echo '<!-- Renders images. @Options (thumbnail, low_resoulution, standard_resolution) -->';
    echo '<a class="group" rel="group1" href="' . $post->images->standard_resolution->url . '"><img src="' . $post->images->thumbnail->url . '"></a>';
  }
}