php 5.6 和 8.0 定义空数组语法完全一致,均支持[]和array(),语义相同;推荐用[],兼容性无差异;区别在于后续操作:解构赋值在8.0报valueerror而5.6仅notice,foreach遍历未定义变量行为不同,类型推导在8.0更精准。

PHP 5.6 和 PHP 8.0 在定义空数组的语法上**完全一致,没有差异**。两者都支持两种写法:[] 和 array(),且语义完全相同。
两种写法都可用,但推荐用 []
从 PHP 5.4 开始,短数组语法 [] 就已引入,5.6 和 8.0 都完整支持:
-
$arr1 = [];—— 简洁、现代、主流推荐 -
$arr2 = array();—— 兼容旧代码,仍有效,但略冗长
注意:array() 不是函数调用,而是语言结构,括号内无参数时不会触发任何逻辑,性能与 [] 几乎无差别。
关键区别不在“怎么写”,而在“怎么用”
真正影响行为的,是后续对空数组的操作,而非定义本身:
-
解构赋值更严格:PHP 8.0 中
[$a, $b] = [];会直接报ValueError;而 PHP 5.6 仅发出 Notice 或静默失败(取决于错误级别) -
遍历未初始化变量:PHP 8.0 对
foreach ($undefined as $v)报 Warning 并转为空数组;PHP 5.6 可能只报 Notice 甚至继续执行 -
类型推导更明确:PHP 8.0 的静态分析(如 IDE、PHPStan)能更准确识别
[]为array类型;5.6 缺乏类型系统支撑,推断较弱
别踩坑:空数组 ≠ null,也 ≠ false
无论哪个版本,都要注意:
-
isset([])返回 true(空数组是已定义、非 null 的值) -
empty([])返回 true(这是语义设计,不是 bug) -
is_array([])返回 true,且在所有版本中行为稳定
所以判断一个变量是否为“有效空数组”,应优先用 is_array($var) && empty($var),而不是依赖 isset 或 == false。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











