首页 > 解决方案 > 非数组的数组式访问(真、假、空等)

问题描述

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

$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

我了解发生了什么(向后兼容性更改)。是否有另一种干净的方法来检查null数组?我看到的唯一工作方法是:

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

但这使我的 if 语句加倍。没有更干净的方法吗?

标签: phparraysphp-7.4

解决方案


由于 PHP 7.4 的特别通知通知了对变量本身的数组项的访问null

尝试访问 null 类型值的数组偏移量

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

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

当你用同样的事情“初始化”数组项时:null

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

小心使用此检查:

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

因为 when $response['errors']is nullforisset()它的行为类似于未定义的索引。同时array_keys()返回用 初始化的键null。所以,更干净的方法是:

  • null当您想要删除项目时,永远不要使用例外情况初始化数组项目。
  • 用于isset($a['name'])检查数组项。

推荐阅读