为了账号安全,请及时绑定邮箱和手机立即绑定

laravel 如何避免non-object错误

laravel 如何避免non-object错误

函数式编程 2019-04-21 20:42:43
laravel调用第三方api的时候,太依赖于第三方的数据结构了,如果第三方结构稍微调整,网页就直接报错。可能的数据结构:1.{'code':200,'result':{'list':['name':'hello','age':18],['name':'world']}}2.{'code':204,'result':'wrong'}3.网络异常获取不到数据。$data->code;如果网络异常会报错$data->result->list;如果数据异常会报错end($data->result->list)->age;如果list的某元素不包含age会报错(这是数据正常的情况)请问怎么配置或编码可以提高laravel的容错性(比如原生的php容错性比较大,所有找不到的元素置空,而不会报错。)
查看完整描述

2 回答

?
慕莱坞森

TA贡献1810条经验 获得超4个赞

对于多层的数据,使用面向对象的方式确实会有很多困难,不如改成array进行访问——在json_decode的时候第二个参数传true。Array取数据取不到一般只是返回null,而不是报错。
$data['code']如果网络异常=>null$data['result']['list']如果数据异常会报错=>nullend($data['result']['list'])['age']如果list的某元素不包含age=>null
                            
查看完整回答
反对 回复 2019-04-21
?
胡子哥哥

TA贡献1825条经验 获得超6个赞

$data->result->list;如果数据异常会报错。
这里报的是non-object异常,解决的方法是通过object_get($data,'result.list','空');主要是object_get方法,你可以看看源码。
end($data->result->list)->age;如果list的某元素不包含age会报错(这是数据正常的情况)。
这里报的是Undefinedproperty异常,解决方法同上object_get(end($data->result->list),'age','空')
                            
查看完整回答
反对 回复 2019-04-21
  • 2 回答
  • 0 关注
  • 349 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信