最安全的空数组写法是array()。它自PHP 4.0起兼容所有版本,而[]仅支持PHP 5.4+,旧版会直接报错;array()语义清晰、工具支持好,适用于变量初始化、类属性默认值及函数返回等场景。

老项目里定义空数组,最安全的写法就是 array()。它从 PHP 4.0 起就存在,能稳稳跑在所有后续版本(5.x、7.x、8.x)上,不挑环境,也不怕老旧服务器或嵌入式系统报错。
为什么别用 []?
方括号语法 [] 是 PHP 5.4 才加进来的。如果项目还跑在 PHP 5.3 或更早版本上,直接解析失败,报 Parse error: syntax error, unexpected '['。这不是警告,是硬性中断。另外,部分静态分析工具(比如旧版 PHP_CodeSniffer)也会对 [] 提出兼容性提醒,团队协作时容易因版本不统一导致部署翻车。
哪些写法真正通用?
- array()——语义最清晰,IDE 和 linter 支持最好,适合函数返回、条件赋值等场景
-
$arr = array();——明确初始化变量,比
$arr = [];更健壮 -
public $data = array();——类属性默认值写法,兼容 PHP 7.4 以下所有版本;若用
public array $data = [];,则只适用于 PHP 7.4+
实际开发中要注意的细节
类型声明不影响初始化语法选择。哪怕用了 function getItems(): array { return array(); },也该坚持用 array(),因为类型提示管的是返回值类型,不是语法合法性。
避免伪空数组陷阱:
立即学习“PHP免费学习笔记(深入)”;
-
$arr = null;→ 不是数组,后续$arr[] = 1会触发 notice -
$arr = array(null);→ 长度为 1,empty($arr)返回 false -
$arr = (array) null;→ 强制转换虽得空数组,但语义模糊,易误导 -
$arr = new ArrayObject();→ 是对象,is_array($arr)为 false,多数数组函数不认
迁移时的推荐做法
升级老项目时,别只盯着新语法炫技。先用 phpcs --standard=PHPCompatibility 扫一遍,把 [] 全部替换成 array() 是低风险、高收益的第一步。尤其在函数返回、类属性、三元表达式(如 $list = $hasData ? $items : array();)中,保持统一写法能减少风格混乱和潜在错误。



















