簡體   English   中英

如何安全地檢索此對象的此屬性?

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

但是,如果未設置itemsdata[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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM