SendGrid配置报错:Mail.php第37行语法错误(意外'[',期待')')
解决SendGrid API代码中的Parse Error语法错误
这个语法错误其实挺常见的,根源出在PHP版本兼容性上,咱们一步步拆解解决:
错误原因分析
你看到的Parse error: syntax error, unexpected '[', expecting ')'错误,主要有两个触发点:
- 代码里用了
[]短数组语法,这个特性是PHP 5.4才引入的,如果你的服务器运行的是PHP 5.3或更低版本,PHP解析器就不认识这个写法,会直接报错。 - 另外,
array_filter(...) ?: null这种把函数调用直接和三元运算符结合的写法,在部分旧PHP版本里也会出现解析歧义,导致报错。
修复方案
方案一:升级PHP版本(推荐)
PHP 5.3及更早的版本早就停止安全维护了,不仅有兼容性问题,还存在安全漏洞。直接把PHP版本升级到5.4及以上(建议7.0+,SendGrid的PHP库对高版本PHP支持更好),不用改代码就能解决问题。
方案二:修改Mail.php代码兼容低版本
如果暂时没法升级PHP,可以把E:\xampp\htdocs\sendgrid-php\lib\helpers\mail\Mail.php第37行的代码改成兼容低版本的写法:
原代码:
public function jsonSerialize() { return array_filter( [ 'email' => $this->getEmail() ], function ($value) { return $value !== null; } ) ?: null; }
修改后的代码:
public function jsonSerialize() { $filteredData = array_filter( array( 'email' => $this->getEmail() ), function ($value) { return $value !== null; } ); return !empty($filteredData) ? $filteredData : null; }
修改点说明:
- 把短数组
[]换成PHP 5.3支持的array()写法 - 把直接在return语句里的复合运算拆成两步:先把过滤后的结果赋值给变量,再通过
!empty()判断后返回,避免解析歧义
验证修复
修改完成后,重新运行你的SendGrid自动发邮件代码,这个语法错误应该就消失了。
内容的提问来源于stack exchange,提问作者Bhagyalakshmi k raju
相关产品推荐
相关产品推荐

