PHP定义空数组有5种主流方式:基础用[](PHP 5.4+)或array()(全版本兼容);类属性中必须用[]声明类型如private array $items = []; 函数参数/返回值可用?array支持null;二维数组需用[[], [], []]或array_fill确保结构完整。

PHP定义空数组看似简单,其实有5种主流方式,各自适用不同版本、结构和开发需求。选对写法,能避免notice警告、提升可读性,也方便后续类型约束与维护。
基础空数组:[] 与 array() 二选一
这是最常用、最直接的两种方式,功能完全等效,区别只在语法风格和兼容性:
-
[]:PHP 5.4+ 支持,简洁清晰,是现代项目首选。例如:
$list = []; -
array():全版本兼容,适合需支持 PHP 5.3 或更旧环境的老系统。例如:
$data = array(); - 两者性能无差异,但
[]在嵌套、函数返回值、类属性中更自然;array()在遗留代码或团队明确要求兼容性时更稳妥。
带类型声明的空数组(PHP 7.4+)
仅限类属性中使用,增强类型安全与IDE提示:
- 必须用
[],array()不被接受。例如:private array $items = []; - 支持默认值初始化:
public array $config = ['debug' => false]; - 不能用于函数内部变量——这是语法限制,不是版本问题。
可为空数组(?array):函数参数与返回值场景
PHP 7.1+ 引入,显式表达“可能为 null”的契约,常见于配置读取、API 响应处理:
立即学习“PHP免费学习笔记(深入)”;
- 函数参数允许传
null:function parse(?array $input): ?array { ... } - 调用时可安全传
null,无需提前判空或抛错;返回值也可为null,调用方需主动检查。 - 对比
array类型:传null会触发Fatal error: Uncaught TypeError,而?array则合法。
二维及多维空数组:结构完整性是关键
空二维数组≠[[]],后者只有1行0列,$arr[0][0]会报 notice。真正可用的写法有:
-
静态声明(适合固定行数):
$grid = [[], [], []];或$map = ['users' => [], 'roles' => []]; -
动态填充(推荐):
$matrix = array_fill(0, $rows, array_fill(0, $cols, ''));,生成严格矩形结构。 -
循环构造(兼容性强):
$matrix = []; for ($i = 0; $i - 注意:不要跳过子数组初始化,比如
$arr[0][0] = 'x'前未设$arr[0] = [],就会触发 warning。
特殊用途空数组:compact、range 与重置技巧
这些不是“从零创建”,但在特定逻辑中等效于获得一个语义明确的空数组:
-
compact():从变量名列表构建关联数组,若对应变量未定义或为
null,结果中该键值为null,非空数组。慎用作“空数组生成器”。 -
range():如
range(1, 0)返回空索引数组[],属边缘用法,不推荐作为主要手段。 -
重置已有变量:
$arr = [];是清空并复用变量;unset($arr); $arr = [];是销毁再重建,仅在极少数作用域清理场景需要。



















