PHP定义空数组的5个常见错误:1.低版本PHP不支持[]简写;2.变量名含非法字符或关键字冲突;3.全局作用域误用return/echo;4.文件BOM头导致解析失败;5.括号不匹配或拼写错误。

PHP定义空数组其实非常简单,但新手常因细微语法问题报错或得到意外结果。不是语法本身难,而是容易忽略上下文和版本差异。下面这5个错误最常出现,逐一排查基本能解决90%的问题。
1. 混用中括号与array()且PHP版本过低
PHP 5.4+ 支持 [] 简写,但若服务器仍是 PHP 5.3 或更早,写 $arr = []; 会直接报 Parse error: syntax error。
- ✅ 正确做法:确认PHP版本(
php -v或phpinfo()) - ✅ 兼容写法(全版本安全):
$arr = array(); - ⚠️ 注意:
array()后面不能跟中文括号、全角符号或换行缩进异常(如复制代码时带隐藏字符)
2. 变量名含非法字符或与关键字冲突
比如写成 $my-array = [];(短横线不是合法变量名字符),或 $class = [];(class 是保留字,虽不报错但可能引发后续问题)。
- ✅ 变量名只能含字母、数字、下划线,且不能以数字开头
- ✅ 避免使用
array、list、echo、return等语言结构名作变量名 - ✅ 推荐命名:
$data = [];、$items = array();
3. 定义位置在函数外却用了return或echo
常见于把数组定义写在全局作用域,却误加了 return []; —— 这在脚本顶层是语法错误(return 只能在函数内使用)。
立即学习“PHP免费学习笔记(深入)”;
- ✅ 全局定义就用赋值:
$config = []; - ✅ 函数内返回才用:
function getOptions() { return []; } - ✅
echo [];会输出Array,但不是“定义失败”,而是误以为没生效——实际已定义,只是没显式输出内容
4. 文件编码或BOM头导致解析中断
用记事本或某些编辑器保存PHP文件时,可能自动添加UTF-8 BOM头(EF BB BF),PHP解析器会在第一行前读到不可见字符,导致 Parse error: syntax error, unexpected '[' 等诡异报错。
- ✅ 用VS Code、PhpStorm、Notepad++等工具,将文件编码设为 UTF-8 无BOM
- ✅ 终端检查:
head -n1 yourfile.php | hexdump -C,开头有ef bb bf就需清除 - ✅ 清除BOM后重试:
$arr = [];就能正常执行
5. 括号不匹配或拼写错误(最隐蔽的低级错误)
看似写了 $list = [];,实则可能是:$list = [;]、$list == [];(用了双等号)、$list = [ ];(空格间混入全角空格或制表符)。
- ✅ 逐字符检查:确保是英文方括号
[ ],不是中文【】、半角[]或键盘误触的其他符号 - ✅ 不要写
= [];单独一行(缺少左边变量) - ✅ 使用IDE的语法高亮和括号匹配功能,能快速发现颜色异常或配对失败
定义空数组本身不复杂,但PHP对语法和环境敏感。先看报错信息里的行号和关键词(如 Parse error、unexpected、T_STRING),再对照这5点快速定位,通常几分钟就能解决。



















