唯一无风险写法是array(),它自PHP 4.0起全版本兼容;而[]是PHP 5.4引入的短数组语法,在PHP 5.3中会导致解析错误。

要让空数组定义在 PHP 5.3 到 8.3 全版本都安全运行,唯一无风险的写法是 array()。它从 PHP 4.0 起就存在,所有后续版本包括 5.3、5.4、7.x、8.3 都原生支持,不会报错、不触发解析失败、不依赖任何扩展或配置。
为什么 [] 不行?
方括号语法 [] 是 PHP 5.4 引入的短数组语法。在 PHP 5.3 环境中使用会直接导致:
- Parse error: syntax error, unexpected '[' —— 解析阶段失败,脚本根本无法启动
- 常见于老旧服务器、政务/金融类 SOAP 接口、嵌入式 PHP 环境
- 即使只在某一行写了
$list = [];,整个文件都会中断执行
哪些 array() 写法真正通用?
以下三种用法全部兼容 PHP 4.0+,推荐按场景选择:
-
$arr = array();—— 最常用,语义清晰,适合变量初始化 -
return array();—— 函数返回空数组的标准写法 -
public $data = array();—— PHP 7.4 之前类属性默认值的唯一合法方式(PHP 7.4+ 支持 typed 属性 +[],但跨版本必须用array())
实际开发中的关键细节
别只看“能跑”,还要注意协作与工具链:
- 静态分析工具(如旧版 PHP_CodeSniffer、PHPStan)可能对
[]推断不准,而array()更易被识别为明确空数组 - 团队若未统一 PHP 版本要求,混用
[]和array()容易引发部署时“本地能跑、线上报错” - SOAP 或 XML-RPC 类接口中,传
null和array()序列化结果完全不同:array()生成空集合节点,null可能被忽略或触发服务端校验失败
升级过渡期怎么写?
如果项目正从 PHP 5.3 升级到 8.3,建议分阶段处理:
- 存量代码保持
array(),不强行替换,避免引入回归问题 - 新模块、新类、新函数内部可逐步采用
[],但需确保最低运行环境 ≥ PHP 5.4 - 类属性 typed 初始化(如
private array $items = [];)仅限 PHP 7.4+,低版本必须回退为private $items = array();并补全类型注释
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











