这是简单的PHP代码
echo '<form method="POST" action="calcbyme.php"></br>
enter value1 :<input type="text" name="f1"></br>
give operator :<input type="text" name="op"></br>
enter value2 :<input type="text" name="f2"></br>
<input type="submit" value="calculate"></br>';
if(isset( $_POST["f1"]) && isset($_POST["f2"]) && isset($_POST["op"]) ){
$a=$_POST["f1"];
$b=$_POST["f2"];
$op=$_POST["op"];
switch ($op){
case '+':
echo "$a+$b=". $a+$b; break;
case '-':
echo "$a-$b=". $a-$b; break;
case '*':
echo "$a*$b=". $a*$b; break;
case '/';
echo "$a/$b=". $a/$b; break;
default:
echo "invalid operator"; break;
}
}
如果我假设$a=4
和$b=2
但这只给出这样的价值
6
2
8
2
如果我放,(逗号)而不是。 (点)然后它给出正确的输出
4+2=6
4-2=2
4*2=8
4/2=2
为什么会这样?
答案 0 :(得分:3)
它与php operator precedence ...
有关 包含 .
的表达式在包含+
的表达式之前执行,因此隐式括号为:
.+-
是相等的运算符(它们没有应用优先级),它们从头到尾依次执行,因此隐式括号为:
echo ("$a+$b=". $a)+$b
因此,如果您想要正确的输出,您应该使用:
echo "$a+$b=". ($a+$b)
经验范例:
php > echo "foo" . 1 + 2;
// 2
php > echo "foo" . (1 + 2);
// foo3
php > echo 1 + 3 . 'foo';
// 4foo
为什么,
正在工作...因为昏迷分离了函数参数而php将其视为:
echo( "$a+$b=", $a+$b);
昏迷操作员(,
)被评估为最后一个。
答案 1 :(得分:0)
区别在于,,
不是连接运算符,而是从头开始
echo "$a+$b=". $a+$b;
{p}与$a=2
和$b=4
评估为
echo ("4+2=". 4)+2;
echo "4+2=4"+2;
echo ((int) "4+2=4")+2;
echo 4+2;
echo 6
关键是,逗号,
不会连接,但它会列出表达式(至少对echo
。manual只是说“多次使用”......),因此每个表达式都是自己执行的。
echo "$a+$b=", $a+$b;
echo "$a+$b="; echo $a+$b;
echo "2+4=";echo 2+4;