我正在处理具有许多可选字段的数组或对象。我正在尝试检查字段值而不会出现PHP错误,这导致我:
$name = isset($revision['data']['name']) ? $revision['data']['name']: null;
或(与Laravel一起)
$name = isset($revision->data->name) ? $revision->data->name: null;
$name = isset($revision->data->name) ? $revision->data->name : 'default';
在这种特殊情况下使用是否安全:
$value = @ $revision['data']['name'];
$value = @ $revision['data']['name'] ?: 'default';
如果没有,那么处理这些价值的更好的方法是什么?
谢谢!
答案 0 :(得分:2)
它在某种意义上是安全的,它可以防止错误报告,但我不会说这是好习惯。当你看到isset
超过@
时,它更明确,主要是因为代码告诉我它正在检查是否设置了数组索引。
另一种选择是使用Laravel的array_get
,如果你不介意拉他们的辅助函数。在这种情况下,您将拥有:$name = (array_get($revision, 'data.name')) ?: null;
,因为Laravel的帮助器将自动为未设置的索引返回null。您也可以手动设置默认值array_get($array, 'foo.bar', 'default');