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
相关产品推荐
相关产品推荐

