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

PHP中访问嵌套对象的opened与loaded属性报错的解决方案咨询

解决方案:访问嵌套对象属性的正确方式

你遇到的报错核心是:你把对象当成了数组来访问,PHP中对象属性不能用$val["loaded"]这种数组下标语法,必须用对象属性访问符->,或者根据属性的访问权限选择对应方法。

1. 公共属性直接访问

如果loaded和opened是对象的公共属性,直接用->访问即可:

public function delayed_onHold($datas)
{
    $days = array();
    $ldate = date('Y-m-d H:i:s');
    foreach ($datas as $key => $value) {
        foreach($value as $x => $val) {
            // 正确访问对象属性
            $loadedValue = $val->loaded;
            $openedValue = $val->opened;
            dump($loadedValue, $openedValue);
          }
    }
    dd();
}

2. 私有/受保护属性的处理

如果属性是private或protected,直接用->会报错,此时有两种方案:

  • 方案一:使用get_object_vars()转数组
    该函数会返回对象中当前可访问的属性组成的关联数组:
    foreach($value as $x => $val) {
        $objVars = get_object_vars($val);
        $loadedValue = $objVars['loaded'] ?? null;
        $openedValue = $objVars['opened'] ?? null;
        dump($loadedValue, $openedValue);
    }
    
  • 方案二:调用类的getter方法
    正规的PHP类通常会为私有属性提供对应的getter方法,比如getLoaded()或getOpened(),直接调用即可:
    foreach($value as $x => $val) {
        $loadedValue = $val->getLoaded();
        $openedValue = $val->getOpened();
        dump($loadedValue, $openedValue);
    }
    

3. 调试技巧

不确定对象结构时,可以用以下方法快速排查:

  • 查看对象所属类:dump(get_class($val));
  • 列出对象所有属性及值:dump(get_object_vars($val));
  • 查看对象的所有方法(包括getter):dump(get_class_methods($val));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 21:25:18