[英]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.