You need to enable JavaScript to run this app. 如何在PHP变量中存储加号并执行算术运算获得正确结果
优惠活动
大模型
产品
解决方案
定价
更多

如何在PHP变量中存储加号并执行算术运算获得正确结果

问题根源

你代码中存在变量名不统一的问题:定义运算符时用的变量是$с(字符с为西里尔字母),后续代码里调用的是$c(字符c为拉丁字母),二者属于完全不同的变量,$c未被定义默认是空值,所以才会出现两类异常结果:

  • 执行echo $a. $c. $b时,空值的$c不会输出,最终拼接结果就是35
  • 执行条件判断时$c === "+"结果为false,进入else分支执行3 - 5,得到结果-2

解决方案

方案1:修复变量名后用条件分支判断(最安全)

直接修正变量名后用条件判断对应运算符执行运算,无任何注入风险,适合运算逻辑简单的场景:

$a = 3; 
$b = 5;
$c = "+"; // 统一使用拉丁字母c作为变量名

if ($c === "+") {
    echo $a + $b; // 输出8
} elseif ($c === "-") {
    echo $a - $b;
} elseif ($c === "*") {
    echo $a * $b;
} elseif ($c === "/") {
    echo $a / $b;
}

方案2:运算符映射表(易扩展)

如果需要支持多种运算符,可通过数组映射的方式实现,代码更简洁易维护:

$a = 3;
$b = 5;
$c = "+";

// 定义运算符和对应处理逻辑的映射
$opMap = [
    '+' => fn($x, $y) => $x + $y,
    '-' => fn($x, $y) => $x - $y,
    '*' => fn($x, $y) => $x * $y,
    '/' => fn($x, $y) => $x / $y
];

if (isset($opMap[$c])) {
    echo $opMap[$c]($a, $b); // 输出8
} else {
    echo "不支持的运算符";
}

方案3:eval执行(不推荐)

你也可以通过eval函数直接执行拼接后的运算表达式,但该方案存在严重的代码注入风险,仅可在完全确定运算符为安全可控值的场景下使用:

$a = 3;
$b = 5;
$c = "+";

eval("\$result = $a $c $b;");
echo $result; // 输出8

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 09:54:07