You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:03:01