You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级PHP时这种接收多返回值的写法为什么报unexpected '='错误

问题原因分析

1. 语法版本兼容问题

你写的短数组解构赋值语法 [$userID, $activationIDref, $expiry] = user_id_lookup($mysqli, $aid) 是 PHP 7.1 版本才新增的特性,用来替代传统的list()写法:

// 等价的旧版本写法
if (!list($userID, $activationIDref, $expiry) = user_id_lookup($mysqli, $aid))

如果你的测试服务器当前PHP版本低于7.1,解析器会把开头的[识别为普通数组定义,遇到后面的=就会判定为非法语法,直接抛出unexpected '='的解析错误。你可以先对比生产和测试环境的PHP版本,大概率是测试环境版本低于生产环境的7.1+版本。

2. 存在运算符优先级的隐藏问题

就算测试环境升级到PHP7.1及以上版本,你当前的写法也不符合预期:逻辑非运算符!的优先级高于赋值运算符=,代码会被解析为先对数组[$userID, $activationIDref, $expiry]求非(结果固定为布尔值false),再尝试把函数返回值赋值给false,逻辑完全错误。
要实现你想要的「先赋值、再判断函数返回值是否为假」的逻辑,需要把整个赋值表达式用括号包裹:

if (!([$userID, $activationIDref, $expiry] = user_id_lookup($mysqli, $aid)))
{ 
    //rest of function
}

临时兼容方案

如果暂时不能统一测试环境和生产环境的PHP版本,可以改成兼容更低版本的list()写法:

if (!list($userID, $activationIDref, $expiry) = user_id_lookup($mysqli, $aid))
{ 
    //rest of function
}

内容的提问来源于stack exchange,提问作者Shaun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 11:15:07