VS Code中PHP代码报错Unexpected 'StringLiteral'. Expected ',' 求助排查
错误原因
这个Unexpected 'StringLiteral'. Expected ','报错属于PHP字符串插值语法错误。你在双引号包裹的字符串中直接使用了$dbh->Record['po_number']这种带单引号的数组访问写法,PHP解析器无法正确识别复合结构的变量,会把数组键的单引号误判为字符串的结束标记,进而抛出语法错误。
同时原代码中a标签的href属性多嵌套了一层多余的单引号,就算语法修复后也会导致生成的链接地址异常。
修复方案
方案1:用大括号包裹复合变量
用{}把字符串中所有复合结构的变量包裹起来,明确告诉PHP解析器这是一个完整的变量单元,修改后代码如下:
while ($dbh->next_record()) { $tracker_info = json_decode($dbh->Record['tracker_info'], TRUE); inform_sl_operations("PO{$dbh->Record['po_number']} needs Follow Up. Due: {$dbh->Record['alert']} \n" . " Click to <a href=\"search_results.php?po_number={$dbh->Record['po_number']}\">view order</a>," . " service@pmm.com", "PO {$dbh->Record['po_number']} needs Follow Up"); }
方案2:提前提取变量(可读性更高)
先把需要用到的字段值提取为独立变量,再拼接到字符串中,避免在字符串里写复杂的数组访问结构:
while ($dbh->next_record()) { $tracker_info = json_decode($dbh->Record['tracker_info'], TRUE); $po_number = $dbh->Record['po_number']; $alert = $dbh->Record['alert']; inform_sl_operations("PO$po_number needs Follow Up. Due: $alert \n" . " Click to <a href=\"search_results.php?po_number=$po_number\">view order</a>," . " service@pmm.com", "PO $po_number needs Follow Up"); }
两种方案都可以解决语法报错问题,同时也修复了原代码中href属性多余单引号的问题。
内容的提问来源于stack exchange,提问作者CodeForGood
相关产品推荐
相关产品推荐

