不会报错。空数组可安全访问任意下标,如$arr=[]; $arr['name']静默返回null;但变量为null、字符串等非数组类型时用数组语法会触发TypeError,未定义变量则先报Undefined variable再报Undefined index。

不会报错。
空数组本身可以安全访问任意下标
定义一个空数组,比如 $arr = [];,之后直接写 $arr['name'] 或 $arr[0],PHP 不会抛出错误或警告——它只是静默返回 null。
这是 PHP 数组的默认行为:下标不存在时,不中断执行,只返回 null(注意不是报 Undefined index,那是针对“已存在但未赋值的键”或外部输入场景)。
真正会报错的情况是变量根本不是数组
报错常见于以下两类:
立即学习“PHP免费学习笔记(深入)”;
-
变量为 null、字符串、整数等非数组类型,却用数组语法访问,例如:
$data = null; echo $data['id']; → 触发 Fatal error: Uncaught TypeError: Cannot access offset of type string on null(PHP 8.0+) - 变量未定义或未初始化,如直接写 echo $undefined['key']; → 触发 Notice: Undefined variable,接着再报 Undefined index
安全取值的推荐做法
别依赖“不报错就等于安全”,尤其在业务逻辑中。建议统一用防御性写法:
- 判断键是否存在:isset($arr['key'])(跳过
null值)或 array_key_exists('key', $arr)(包含null值) - 提供默认值:$value = $arr['key'] ?? 'default';
- 多层嵌套时避免链式崩溃:$name = $user['profile']['name'] ?? null;(PHP 7.0+ 支持)
小提醒:空数组 ≠ 变量为 null
[] 是合法数组,null 是空值类型。前者能响应数组操作(如 count()、foreach),后者连 isset($null['x']) 都会报致命错误。写代码时先确认变量类型,比猜它“是不是空”更重要。



















