
本文详解如何在 PHP 中遍历含对象与嵌套数组的复杂结构(如 cPanel API 返回数据),重点解决 userlist 为数组而非对象时误用 ->user 导致的“Trying to get property of non-object”错误。
本文详解如何在 php 中遍历含对象与嵌套数组的复杂结构(如 cpanel api 返回数据),重点解决 `userlist` 为数组而非对象时误用 `->user` 导致的“trying to get property of non-object”错误。
在处理 cPanel、WHM 或其他 API 返回的 JSON 解析结果(通常为 stdClass 对象嵌套数组)时,开发者常因混淆对象属性访问(->)与数组下标访问([])而报错。正如示例中所示:$value->userlist 是一个索引数组(含一个 stdClass 对象),而非单个对象,因此 $value->userlist->user 会触发致命错误。
✅ 正确做法是先通过数组下标获取内部对象,再访问其属性:
<?php foreach ($result->cpanelresult->data as $value): ?>
<p>
<strong>DB Name:</strong> <?php echo htmlspecialchars($value->db); ?> |
<strong>Size:</strong> <?php echo htmlspecialchars($value->size); ?> |
<strong>User:</strong> <?php echo htmlspecialchars($value->userlist[0]->user); ?>
</p>
<?php endforeach; ?>
⚠️ 注意事项:
- userlist 是数组(即使只含 1 个元素),必须用 $value->userlist[0] 获取首个对象,再用 ->user 访问属性;
- 实际生产环境中应增加健壮性检查,避免因 userlist 为空或缺失导致错误:
<?php foreach ($result->cpanelresult->data as $value): ?>
<?php $user = !empty($value->userlist) && isset($value->userlist[0]->user)
? $value->userlist[0]->user
: 'N/A'; ?>
<p>
<strong>DB:</strong> <?php echo htmlspecialchars($value->db); ?> |
<strong>User:</strong> <?php echo htmlspecialchars($user); ?></p>
<?php endforeach; ?>
? 小技巧:使用 var_dump($value->userlist) 或 print_r($value->userlist) 可快速确认其真实结构(是 array 还是 object),避免凭经验误判。
总结:PHP 中混合对象与数组的数据结构需严格区分访问语法——对象用 ->,数组用 [];嵌套层级越深,越需逐层验证类型。添加空值与索引存在性检查,是编写健壮 API 数据解析逻辑的关键实践。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











