php 7.4+ 中类型化空数组必须写为 private array $items = [];,array()、省略访问修饰符或未初始化均非法;支持带默认值的关联数组初始化;php 8.2+ 可加 readonly 保障不可变。

PHP 7.4 引入类型化属性(Typed Properties),让类中数组声明既安全又清晰。在类里定义空数组,不能只写 $items = [],必须搭配类型声明和方括号语法。
必须用 private array $items = [];
这是唯一被 PHP 7.4+ 接受的 typed 空数组初始化写法:
- 类型声明
array和赋值= []缺一不可 -
array()在这里会报语法错误,只认[] - 访问修饰符(
private/protected/public)不可省略 - 该写法属于编译期初始化,实例一创建就自带空数组,不依赖构造函数
支持带默认值的关联数组
不只是空结构,还能直接初始化含键值的数组,同时保持类型安全:
public array $config = ['debug' => false, 'timeout' => 30];protected array $headers = ['Content-Type' => 'application/json'];- 这些值在对象实例化时即生效,IDE 能准确识别结构和类型
别踩这些坑
常见误写不仅无效,还可能引发致命错误或失去类型保障:
-
private array $data = array();→ 语法报错,array()不被允许 -
private $items = [];→ 可运行但无类型约束,IDE 不提示,静态分析失效 -
private array $cache;→ 属性未初始化,首次访问触发Fatal error: Typed property must not be accessed before initialization -
unset($this->items); $this->items = [];→ 销毁再重建,破坏初始化语义,且可能使属性进入“未初始化”状态
PHP 8.2+ 可叠加 readonly 保证不可变
若数组初始化后不应被修改,可用只读属性进一步加固:
public readonly array $constants = ['PI' => 3.14159, 'E' => 2.71828];- 尝试赋值会立即报错:
Cannot modify readonly property - 适合配置、枚举、常量映射等场景,兼顾类型与数据稳定性
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











