应显式初始化数组变量(如$items = []),避免在条件分支、函数作用域或超全局变量访问中因未声明直接使用而触发“undefined variable”错误。

PHP中定义空数组报错“Undefined variable”,通常不是因为数组定义本身出错,而是变量在使用前未被声明或初始化,尤其在条件分支、函数作用域或超全局变量处理中容易触发。
变量未显式初始化就直接使用
PHP不会自动为未声明的变量赋默认值(比如空数组),若代码中直接对未定义变量执行 $arr[] = 'value' 或 array_push($arr, 'value'),就会报“Undefined variable”。
- 错误写法:array_push($items, 'apple');($items 根本没出现过)
- 正确写法:$items = []; 或 $items = array();,再操作
条件分支中只在部分路径初始化变量
比如 if/else 中只在 if 块里定义了数组,但后续代码在 else 路径外直接用了该变量,PHP 在 else 分支执行时会认为变量未定义。
- 问题示例:
if ($flag) { $data = ['a']; }
echo count($data); // $flag 为 false 时 $data 未定义 - 修复方式:统一在分支前初始化,如 $data = [];
函数内使用外部变量却未 global 或参数传入
在函数中想修改或读取外部定义的数组,但既没用 global $arr,也没作为参数传入,PHP 就会当作全新局部变量处理,导致“Undefined variable”。
- 错误:function add() { $list[] = 'x'; }($list 是函数内未声明变量)
- 推荐方式:function add(&$list) { $list[] = 'x'; } 或 function add() { global $list; $list[] = 'x'; }
检查超全局变量是否真的存在再使用
比如想用 $_POST['tags'] 当数组,但表单没提交该字段,$_POST['tags'] 就不存在。直接 foreach($_POST['tags'] as ...) 会报错。
- 安全写法:$tags = $_POST['tags'] ?? [];(PHP 7.0+)
- 兼容旧版:$tags = isset($_POST['tags']) ? (array)$_POST['tags'] : [];
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











