non-object php,laravel 如何避免non-object错误

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容错性比较大,所有找不到的元素置空,而不会报错。)

回复内容:

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容错性比较大,所有找不到的元素置空,而不会报错。)

对于多层的数据,使用面向对象的方式确实会有很多困难,不如改成array进行访问 —— 在json_decode的时候第二个参数传true。 Array取数据取不到一般只是返回null,而不是报错。

$data['code'] 如果网络异常 => null

$data['result']['list'] 如果数据异常会报错 => null

end($data['result']['list'])['age'] 如果list的某元素不包含age => null

$data->result->list; 如果数据异常会报错。

这里报的是non-object异常, 解决的方法是通过 object_get($data, 'result.list', '空');主要是object_get方法,你可以看看源码。

end($data->result->list)->age; 如果list的某元素不包含age会报错(这是数据正常的情况)。

这里报的是 Undefined property 异常, 解决方法同上 object_get(end($data->result->list), 'age','空')

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值