如何安全地检索此对象的此属性?

Hen*_*nry 2 php properties object laravel

我有一个Stripe订阅对象,看起来像这样......

subscription: {
    items: {
        data: [
            plan: {
                id: 'my_plan_id'
            }
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)

安全检索计划ID的最佳方法是什么?目前我正在做以下事情.

'plan_id' => $subscription->items->data[0]->plan->id,
Run Code Online (Sandbox Code Playgroud)

但是,它看起来像是否会失败items,data[0]或者plan,没有设置.我可以做if if语句if (isset($subscription->items) && isset(data[0]) ...,但我不确定这是最好的方法.

是否有一个PHP方法或Laravel方法可以用来安全地提取那个比那更干净的属性?

Ale*_*sky 9

如果您使用的是PHP 7+,则可以使用null coalesce运算符:

'plan_id' => $subscription->items->data[0]->plan->id ?? $default,
Run Code Online (Sandbox Code Playgroud)

这将评估值是否可用,否则将使用默认值,而不会生成任何警告或错误.

例:

$foo = new stdClass();
var_dump($foo->bar->baz->data[0]->plan->id ?? null);
Run Code Online (Sandbox Code Playgroud)

输出:

NULL
Run Code Online (Sandbox Code Playgroud)

  • 这仅在您访问类/数组的属性时才有效。当使用相同的语义但使用 PHP 将抛出的方法时。(只是面向 OO 开发人员的提醒) (6认同)