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

PHP中trying to get property data/version of non object通知的解决方法

解决"trying to get property of non object"通知问题

问题根源

你收到的两条通知,本质是代码直接嵌套访问属性,但没提前检查每一层是否有效:

  • json_decode($url) 可能返回null(当URL返回的内容不是合法JSON时),或者返回数组,这时$json不是对象,访问$json->data就会触发通知。
  • 就算$json是对象,$json->data可能不存在,或者data数组是空的,访问$json->data[0]->version时,data[0]不是有效对象,同样会触发通知。

修复代码

在访问每一层属性前,逐层做有效性检查,确保不会访问非对象/不存在的属性:

$json = json_decode($url);  

// 先确保$json是对象,且data是存在的非空数组
if (is_object($json) && isset($json->data) && is_array($json->data) && !empty($json->data)) {
    $latestItem = $json->data[0];
    // 再检查version属性是否存在
    if (isset($latestItem->version)) {
        $latestVersion = $latestItem->version;
        if ($latestVersion != $version && $latestVersion > $version) {
             echo 'Do Something'; 
        }
    }
}

额外优化

  • 如果需要兼容JSON返回数组的场景,可以给json_decode加第二个参数true,让它返回关联数组,然后用数组方式访问:
$json = json_decode($url, true);  

if (isset($json['data']) && is_array($json['data']) && !empty($json['data']) && isset($json['data'][0]['version'])) {
    $latestVersion = $json['data'][0]['version'];
    if ($latestVersion != $version && $latestVersion > $version) {
         echo 'Do Something'; 
    }
}
  • 可以用json_last_error()排查JSON解码失败的原因,方便调试:
$json = json_decode($url);  
if (json_last_error() !== JSON_ERROR_NONE) {
    // 这里可以记录错误日志或者做其他处理,比如直接返回
    return;
}
// 后续再执行检查逻辑...

内容的提问来源于stack exchange,提问作者AlwaysStudent

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 20:10:30