如何访问包含数组的对象属性?Drupal中$steps取值报错如何解决
问题原因
- 你的
$steps变量本身是Drupal\form\Manager\StepManager类的对象实例,不是数组,无法直接用$steps[1]的数组下标方式读取内部存储的步骤列表 - 你要访问的
steps(StepManager类的属性)、values(StepOne类的属性)都是*受保护(protected)*类型,PHP语法不允许直接在类外部访问受保护/私有属性,你直接写->values调用本身就是非法的
解决方案
Drupal的自定义业务类通常会为受保护属性提供公开的Getter方法,你可以按以下步骤取值:
- 先调用StepManager类的
getSteps()方法获取内部存储的步骤数组:
$stepList = $steps->getSteps();
- 从步骤数组中取出索引为1的StepOne对象
$stepOne = $stepList[1];
- 调用StepOne类的
getValues()方法获取内部存储的数值数组,再读取对应的key值
$values = $stepOne->getValues(); $targetKey = $values['key'];
如果对应类没有提供现成的Getter方法,你可以在对应类中新增公开的读取方法:
- 在
Drupal\form\Manager\StepManager类中新增:
public function getSteps() { return $this->steps; }
- 在
Drupal\form\Step\StepOne类中新增:
public function getValues() { return $this->values; }
不推荐用反射方式强行读取受保护属性,不符合Drupal的编码规范,后续版本升级容易出现兼容性问题。
内容的提问来源于stack exchange,提问作者Boby
相关产品推荐
相关产品推荐

