在解构数组时避免 PHP 通知解决方案@具有默认值的解决方案

2022-08-30 20:40:03

假设我们有以下数组:

$ourArray = [
   'a' => 'a',
   'b' => 'b',
];

我们尝试获取 key 的值(不存在):'c'

$someValue = $ourArray['c'] ?? null;

因此,前面的语句不会发出任何通知,因为它只是 语法糖。欲了解更多信息,请访问PHP网站isset

在 PHP7.1 中引入了对称数组解构,因此其思路是去结构数组,避免通知,例如:

[
    'c' => $someValue
] = $ourArray;

所以这将抛.Undefined index: c in $ourArray ...

那么,有没有办法避免PHP使用对称数组解构来抛出通知呢?并且无需使用 或 等函数。error_reportingini_set


答案 1

解决方案@

您可以使用该运算符。
https://secure.php.net/manual/en/language.operators.errorcontrol.php@

@[
    'c' => $someValue
] = $ourArray;

免责声明
此运算符存在争议。它可能会从函数调用中隐藏有用的错误消息。许多程序员即使成本很高,也会避免使用它。对于分配,它是安全的。

具有默认值的解决方案

基于h2ooo的评论。

如果您可以并且想要定义所有默认值,则可以使用下面的代码。

[
    'c' => $someValue
] = $ourArray + $defaults;

操作员很重要。该函数不会保留数字键。+array_merge

的定义可能如下所示。您必须为每个可能的键定义值。$defaults

$defaults = [
    'a' => null,
    'b' => null,
    'c' => null,
    'd' => null,
    'e' => null,
    'f' => null,
];

# or

$defaults = array_fill_keys(
    ['a', 'b', 'c', 'd', 'e', 'f'],
    null
);

答案 2

您可以尝试:

[
    'c' => $someValue
] = $ourArray + ['c' => null];