非数组的数组式访问(true、false、null 等)

Array-style access of non-arrays (true, false, null, etc)

所以,这就是我的数组的结构:

$this->response = [
    'code' => null,
    'errors' => null,
    'data' => null,
];

当我尝试检查是否有任何错误时,我现在会这样做:

if ($response['errors'] !== null) {
   // code here
}

这给了我 PHP 7.4 中的通知:

Trying to access array offset on value of type null in /app/src/Form/Form.php on line XX

我明白发生了什么 (backward compatibility changes)。有没有另一种干净的方法来检查数组中的 null ?我看到的唯一工作方法是:

 if (isset($response['errors']) && $response['errors'] !== null) {
     // code here
 }

但这会使我的 if 语句加倍。有没有更简洁的方法?

因为PHP 7.4特别通知通知访问变量的数组项本身是null:

Trying to access array offset on value of type null

用 PHP 中的 null 初始化任何变量,该变量的行为就像未设置一样:

$a = null;
var_dump(isset($a)); // bool(false)

当你 "initialize" array item with null 同样的事情会发生:

$a['name'] = null;
var_dump(isset($a['name'])); // bool(false)

谨慎使用此检查:

if ($response['errors'] !== null)

因为当 $response['errors'] 对于 isset()null 时,它的行为类似于未定义的索引。同时array_keys()returns键用null初始化。所以,更简洁的方法是:

  • 切勿使用 null 初始化数组项,除非您要删除项。
  • 使用 isset($a['name']) 检查数组项。