laravel 如何避免non-object错误

WBOY
Freigeben: 2016-06-06 20:31:43
Original
1349 Leute haben es durchsucht

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的时候第二个参数传trueArray取数据取不到一般只是返回null,而不是报错。

$data['code'] 如果网络异常 => null
$data['result']['list'] 如果数据异常会报错 => null
end($data['result']['list'])['age'] 如果list的某元素不包含age => null

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

  2. end($data->result->list)->age; 如果list的某元素不包含age会报错(这是数据正常的情况)。
    这里报的是 Undefined property 异常, 解决方法同上 object_get(end($data->result->list), 'age','空')

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage