ホームページ > バックエンド開発 > PHPチュートリアル > laravel 如何避免non-object错误

laravel 如何避免non-object错误

WBOY
リリース: 2016-06-06 20:31:43
オリジナル
1371 人が閲覧しました

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','空')

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート