[英]How can I safely retrieve this property of this object?
我有一个Stripe订阅对象,看起来像这样......
subscription: {
items: {
data: [
plan: {
id: 'my_plan_id'
}
]
}
}
安全检索计划ID的最佳方法是什么? 目前我正在做以下事情。
'plan_id' => $subscription->items->data[0]->plan->id,
但是,如果未设置items
, data[0]
或plan
,则看起来会失败。 我可以做if if if (isset($subscription->items) && isset(data[0]) ...
类的语句,但我不确定这是最好的方法。
是否有一个PHP方法或Laravel方法可以用来安全地提取那个比那更干净的属性?
如果您使用的是PHP 7+,则可以使用null coalesce运算符:
'plan_id' => $subscription->items->data[0]->plan->id ?? $default,
这将评估值是否可用,否则将使用默认值,而不会生成任何警告或错误。
例:
$foo = new stdClass();
var_dump($foo->bar->baz->data[0]->plan->id ?? null);
输出:
NULL
您可以在整个选择器上使用isset
函数:
isset($subscription->items->data[0]->plan->id) ? $subscription->items->data[0]->plan->id : null;
通过键列表访问嵌套结构的一种相当麻烦但通用的方法; 可以很容易地成为可重用的功能:
$id = array_reduce(['items', 'data', 0, 'plan', 'id'], function ($o, $k) {
if (!$o) {
return null;
} else if (is_array($o) && isset($o[$k])) {
return $o[$k];
} else if (isset($o->$k)) {
return $o->$k;
}
}, $subscription);
你可以利用ternary condition
来检查是否设置了值。 如果设置然后放置该值,否则将默认值设置为
$id=isset($subscription->items->data[0]->plan->id) ? $subscription->items->data[0]->plan->id : $your_dafault_value;
如果设置了值,则$id
看起来像
$id='my_plan_id';//In most cases we should consider null as a default value
如果未设置该值,则$id
看起来像是liks
$id='your_dafault_value';
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.