2 回答
TA贡献1772条经验 获得超6个赞
与私有属性一样,不能从对象的内部上下文外部访问受保护的属性。但是,受保护属性和私有属性的区别在于,扩展对象可以查看父级的受保护属性,但不能查看私有属性。
如果出于任何原因必须直接访问受保护的属性,请扩展目标对象并提供 getter 方法:
class MyExtendingClass extends WC_Product_Simple {
public function getData() {
return $this->data;
}
}
话虽如此,该类应该已经扩展了一个公开方法的父对象。这可能就是你要找的。在这种情况下,只需改为执行以下命令:WC_Product_Simpleget_data()
$data = $package['contents']['abc123']['data']->get_data();
TA贡献2011条经验 获得超2个赞
B.弗莱明有比这更好的答案,但我仍然想分享我在看到他的回应之前所想到的。
首先,我将对象转换为数组。这从对象中获取,并使其成为受保护的阵列密钥,如下所示。[key:protected][ * key]
然后可以像这样访问受保护的数组密钥(必须使用双引号,因为它不适用于单引号)。$my_array["\0*\0key"]
所以我的解决方案是这样的:
$data_array = (array)$package['contents']['abc123']['data']; // Cast object to array
$name = $data_array["\0*\0data"]['name'];
- 2 回答
- 0 关注
- 107 浏览
添加回答
举报