PHP从JSON数组取变量报错:Undefined property问题排查
解决Twitter推文拉取时
name/screen_name未定义的问题 嘿,我之前用Abraham的Twitter OAuth库开发时也踩过一模一样的坑,来给你捋清楚问题出在哪:
核心原因:用户属性嵌套在user子对象里
你看到var_dump里有name和screen_name,大概率是调试时展开了status对象的嵌套属性,误以为这些字段直接属于$status本身,但实际上Twitter API返回的推文对象里,发布者的用户信息是封装在user这个子对象里的,正确的访问路径应该是$status->user->name和$status->user->screen_name。
修改后的代码
把你的循环代码调整成这样就行:
<?php foreach ($statuses as $key => $status) { echo ' <blockquote class="twitter-tweet" data-lang="en"><p lang="und" dir="ltr">' . $status->text . '</p> ' . $status->user->name . ' (@' . $status->user->screen_name . ') <a href="https://twitter.com/' . $status->user->screen_name . '/status/' . $status->id_str . '">' . $status->created_at . '</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script><br> '; } ?>
为什么var_dump看起来有这些属性?
Twitter的REST API返回的Status对象结构里,用户相关的所有字段(比如name、头像、用户名)都被打包在user字段下的嵌套对象中。你之前的var_dump输出应该是展开了这个嵌套对象后的完整显示,才会看到这些属性,但直接访问$status->name自然会提示未定义。
额外小提示
如果怕某些特殊场景下user属性为空(比如转发的特殊推文),可以加个判断避免报错:
// 先做存在性检查,兜底显示默认值 $userName = isset($status->user->name) ? $status->user->name : 'Unknown User'; $screenName = isset($status->user->screen_name) ? $status->user->screen_name : 'unknown_user';
内容的提问来源于stack exchange,提问作者Henry D.
相关产品推荐
相关产品推荐

