php - 不能使用stdClass类型的对象作为数组

时间:2013-02-04 10:33:07

标签: php arrays

我的twitter插件一直出现这个错误:

致命错误:无法在第72行的C:....中使用stdClass类型的对象作为数组

它有时只显示,但我的推特计数器在相当长的一段时间内没有改变。你能帮忙吗?代码如下,关于行位于中间:update_option('pyre_twitter_followers',$ json [0] - > user-> followers_count);

<?php if(get_option('pyre_twitter_id')): ?>
<div class="social-box">
  <a href='http://twitter.com/<?php echo get_option('pyre_twitter_id'); ?>'>
  <img src="<?php echo get_template_directory_uri(); ?>/images/twitter.png" alt="Follow us on Twitter" width="48" height="48" /></a>
  <?php
  $interval = 3600;

  if($_SERVER['REQUEST_TIME'] > get_option('pyre_twitter_cache_time')) {
    @$api = wp_remote_get('http://twitter.com/statuses/user_timeline/' . get_option('pyre_twitter_id') . '.json');
    @$json = json_decode($api['body']);

    if(@$api['headers']['x-ratelimit-remaining'] >= 1) {
      update_option('pyre_twitter_cache_time', $_SERVER['REQUEST_TIME'] + $interval);
      update_option('pyre_twitter_followers', $json[0]->user->followers_count);
    }
  }
  ?>
  <div class="social-box-text">
    <span class="social-arrow"></span>
    <span class="social-box-descrip"><?php _e('Follow us on Twitter', 'pyre'); ?></span>
    <span class="social-box-count"><?php echo get_option('pyre_twitter_followers'); ?> <?php _e('Followers', 'pyre'); ?></span>
  </div>
</div>
<?php endif; ?>

2 个答案:

答案 0 :(得分:0)

数组和对象具有不同的语法:

$array = array(
    'foo' => 'bar',
);
$object = (object)$array;

var_dump($array['foo'], $object->foo);

不能使用stdClass类型的对象作为数组错误消息在这一行引用数组语法(方括号):

update_option('pyre_twitter_followers', $json[0]->user->followers_count);
                                             ^^^

如果它有效,它会出现$json是一个对象的情况,以及它是一个数组的情况。变量来自这里:

$json = json_decode($api['body']);

docs for json_decode()通知我们第二个参数决定是生成对象还是数组:

  

mixed json_decode ( string $json [, bool $assoc = false [, int $depth = 512 [, int $options = 0 ]]] )

     

<强> ASSOC       当TRUE时,返回的对象将被转换为关联数组。

答案 1 :(得分:0)

json_decode()函数有两个参数。如果需要数组表示,则需要传递true作为第二个参数值。否则,它默认生成一个对象表示。

http://php.net/json_decode