推荐用[]初始化空数组,语义清晰、性能略优、符合现代风格;避免array()写法;类型安全场景应声明array类型并初始化;统一初始化可提升判断可靠性。

PHP中定义空数组看似简单,但不同写法在语义、可读性、兼容性和性能上存在细微差异。最优雅的方式不是追求最短,而是兼顾明确性、一致性与未来扩展性。
推荐用 [](空方括号)初始化
这是PHP 5.4+官方推荐的语法,简洁、直观、无歧义:
- 语义清晰:一眼看出是数组,而非其他类型(如
array()在旧代码中可能被误读为函数调用) - 性能略优:字节码更少,解析更快(虽微乎其微,但无坏处)
- 现代风格:与JavaScript、Python等语言保持一致,团队协作更友好
$users = [];$config = ['host' => 'localhost', 'port' => 3306]; // 同样适用于带键值的数组
避免用 array()(尤其新项目)
虽然仍完全可用,但在PHP 7+环境中已显陈旧:
- 多打5个字符,无实质增益
- 易与函数调用混淆(如
array_merge()),降低扫描效率 - 在严格模式或静态分析工具(如PHPStan)中,
array()不携带类型提示信息,而[]在PHP 8+类型系统中更易被推断
需要类型安全时,配合PHP 7.4+属性类型声明
如果变量用于类属性,且需明确限定为“数组”,应直接声明类型:
立即学习“PHP免费学习笔记(深入)”;
-
private array $items = [];—— 声明类型 + 初始化,既防错又自文档 - 避免
private $items = [];这种弱声明,后期容易被意外赋值为字符串或null - 搭配构造函数或setter时,类型检查会在运行时生效,减少隐性bug
特殊场景:需区分“未设置”和“空数组”时,慎用 isset() 和 empty()
初始化本身不解决逻辑判断问题,但初始化方式影响后续判断可靠性:
- 用
$data = [];后,isset($data)为true,empty($data)也为true—— 符合预期 - 若留空不初始化(
private $data;),则isset($data)为false,可能引发Notice或逻辑分支错误 - 建议统一初始化,再用
count($data) === 0或!$data判断空,语义更直白



















