php - 非数组的数组式访问(真、假、空等)
问题描述
所以,这就是我的数组的结构:
$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 语句加倍。没有更干净的方法吗?
解决方案
由于 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 null
forisset()
它的行为类似于未定义的索引。同时array_keys()
返回用 初始化的键null
。所以,更干净的方法是:
null
当您想要删除项目时,永远不要使用例外情况初始化数组项目。- 用于
isset($a['name'])
检查数组项。
推荐阅读
- reactjs - 更改“下一个导出”的文件夹
- node.js - 需要对聚合分组进行分页弹性搜索
- django - 如何在django中缓存查询结果并使用它?
- android - 如何在 Android 的目录中列出文件?
- ruby-on-rails - 自定义rails任务未在rails 6中显示/加载
- javascript - 如何为表格行设置动画
- sql-server - 将 SQL Server 与 Spark Scala 连接时出现连接错误
- java - 构建maven项目时无法运行“egrep”
- java - 匹配规则集与 Java 中的输入数据集
- c# - 使用通道工厂将身份验证令牌添加到 WCF 服务调用中