php 7.3+ 支持 list() 内部引用赋值,必须写成 list($a, &$b, $c) = $arr;,& 只能紧贴变量名,否则无效;引用后修改 $b 即修改原数组对应元素。

PHP 7.3 中 list() 支持引用赋值,但语法位置和写法极易出错,一写错就静默失败或报 Strict Standards 错误。
list() 中正确声明引用的写法
必须在 list() 内部的变量前加 &,而不是在 list 关键字前或整个表达式右侧加:
✅ 正确写法:list($a, &$b, $c) = $arr;
❌ 错误写法:&list($a, $b, $c) = $arr; 或 list($a, $b, $c) = &$arr;
这一步不能颠倒顺序——& 只能紧贴被引用的变量名,否则 PHP 不识别为引用解构,而是当作普通赋值处理,后续修改 $b 将完全不影响原数组元素。
引用解构后修改原数组元素
方法一:直接改引用变量
$arr = ['x', 'y', 'z'];
list($first, &$second, $third) = $arr;
$second = 'Y'; // 此时 $arr[1] 已变为 'Y'
方法二:通过数组下标间接验证
echo $arr[1]; // 输出 'Y',证明引用生效
【注意】$second 是 $arr[1] 的别名,不是副本;改 $second 就等于改 $arr[1]
常见错误场景与避坑步骤
第一步:确认 PHP 版本 ≥ 7.3.0 —— 低于此版本不支持 list() 内部引用,会直接解析失败或报 Parse error。
第二步:检查赋值源是否为可写数组 —— 若 $arr 是函数返回的临时数组(如 array_values() 结果),PHP 7.3+ 允许引用解构,但某些旧扩展可能拒绝引用绑定。
第三步:避免嵌套 list 引用 —— 如 list(list(&$x)) = $data; 在 PHP 7.3 中未定义行为,部分环境会警告,部分静默忽略。
第四步:引用解构后不要 unset 源数组键 —— unset($arr[1]); 会导致 $second 成为悬空引用,后续读写可能触发 Notice 或返回 null。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











