PHP中两段看似相同的计算代码结果不同,原因何在?
问题原因:运算顺序与运算符优先级差异
两段代码看似相似,但本质上运算顺序完全不同,核心原因是PHP的运算符优先级规则,以及分步运算和合并表达式的逻辑差异。
第一段代码的计算过程
分步运算时,每一步的结果都会作为下一步的输入,计算流程是:
$var = 4; $var = 4 * 23; // 4×23=92 $var = 92 - 46; // 92-46=46 $var = 46 + 86; // 46+86=132 $var = 132 / 2; // 132÷2=66 $var++; // 66+1=67
这里的除法是对**前面所有运算结果的总和(4×23-46+86)**进行的,也就是把132整体除以2。
第二段代码的计算过程
合并成单个表达式时,PHP会遵循运算符优先级:乘法(*)、除法(/)的优先级高于加法(+)、减法(-),因此运算顺序是:
$var = 4; // 先算括号内的乘法、单独的除法,再按从左到右算加减 $var = (4*23) - 46 + (86/2); // 拆解:92 - 46 + 43 → 46 + 43 = 89 $var++; // 89+1=90
这里的除法只作用于86,而不是前面所有运算的结果,这就是两段代码结果不同的关键。
修正方案
如果想让第二段代码和第一段结果一致,需要给整个加减部分加上括号,强制改变运算顺序:
$var = (($var * 23) - 46 + 86) / 2; $var++; // 此时计算结果就是67
内容的提问来源于stack exchange,提问作者Kenny
相关产品推荐
相关产品推荐

