Laravel/PHP中如何获取第三方API返回对象中#data属性的值
#号属性的含义
你在调试输出中看到的#data前缀的#并不是属性真实名称的一部分,这是PHP调试输出(包括Laravel默认使用的Symfony VarDumper组件)的固定标识,用来标记该属性是受保护(protected)类型的类属性,该属性的实际名称就是data。
受保护属性不允许类的外部直接访问,所以不能直接通过$object->data的方式读取值。
正确获取值的方法
你可以根据实际情况选择以下三种方案,优先推荐第一种:
方案1:调用类提供的公开访问器(最优)
正常封装的类都会为内部属性提供公开的读取方法,你可以先查看DataPartInfo类的定义,是否存在getData()之类的公开方法,直接调用即可:$data = $response['dataInfo']->getData();方案2:使用Laravel内置辅助函数读取
Laravel提供的data_get辅助函数已经封装了属性访问的兼容逻辑,可以直接读取受保护属性:$data = data_get($response['dataInfo'], 'data');方案3:通过PHP反射手动读取
如果上述两种方案都不可用,可以通过PHP反射机制强行读取受保护属性:$infoObj = $response['dataInfo']; $ref = new ReflectionClass($infoObj); $dataProp = $ref->getProperty('data'); $dataProp->setAccessible(true); $data = $dataProp->getValue($infoObj);
如果拿到的
$data是你示例中显示的二进制字符串格式,可以直接用(string)$data转成普通文本格式使用。
内容的提问来源于stack exchange,提问作者testing one
相关产品推荐
相关产品推荐

