PHP中的简单算术

Str*_*ger 5 php

这是一个简单的php程序,它提供了一个奇怪的输出.任何人都可以解释为什么会这样,以及如何获得预期的输出?

<?php
$a=2;$b=3;

echo "<br> ADD:".$a+$b;
echo "<br> SUB:".$a-$b;
echo "<br> MUL:".$a*$b;
echo "<br> DIV:".$a/$b;
?>
Run Code Online (Sandbox Code Playgroud)

输出:

3-3
MUL:6
DIV:0.66666666666667
Run Code Online (Sandbox Code Playgroud)

预期产出:

ADD:5
SUB:-1
MUL:6
DIV:0.66666666666667
Run Code Online (Sandbox Code Playgroud)

Jon*_*Jon 12

这是因为字符串连接运算符与add/sub运算符.具有相同的优先级,并且它们都是左关联的.这意味着评估从左到右进行,因此"<br> ADD:".$a首先进行评估,然后将结果添加到3.此特定字符串转换为零,0 + 3 = 3.类似于减法.

解决方案:将算术放在括号中.

echo "<br> ADD:".($a+$b);
echo "<br> SUB:".($a-$b);
Run Code Online (Sandbox Code Playgroud)

另一方面,mul/div具有比串联更高的优先级,因此它们产生预期的结果.