PHP 8.2 heredoc中变量插值执行数学运算报错问题排查
PHP 8.2 Heredoc中数学运算插值的语法问题
问题代码
$a = 4; $b = 2; $str = <<<EOT $a + $b = {$a + $b} EOT; print $str;
报错信息
PHP Parse error: syntax error, unexpected token "+", expecting "->" or "?->" or "["
问题原因
Heredoc的大括号插值语法仅支持直接引用变量、对象属性或数组元素,无法直接解析大括号内的数学运算这类表达式。PHP解析器会把{$a + $b}拆成{$a}(变量$a)和后续的+ $b,导致语法错误。
解决方案
方案1:预计算结果到变量(推荐)
先把运算结果存入变量,再在Heredoc中引用变量,语法清晰且兼容性好:
$a = 4; $b = 2; $sum = $a + $b; // 预计算运算结果 $str = <<<EOT $a + $b = $sum EOT; print $str;
方案2:使用表达式插值的正确语法
在PHP 8.0+中,可通过${(表达式)}的语法直接插入运算结果:
$a = 4; $b = 2; $str = <<<EOT $a + $b = ${($a + $b)} EOT; print $str;
内容的提问来源于stack exchange,提问作者John Cowan
相关产品推荐
相关产品推荐

