(逗号)和之间的区别是什么.(点)作为串联运算符


What is difference between , (comma) and . (dot) as a concatenation operator?

以下是简单的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

为什么会发生这种情况?

这与php运算符的优先级有关。。。

包含.的表达式在包含+的表达式之前执行,因此隐式括号为:

.+-是相等的运算符(没有优先级),它们从开始到结束依次执行,因此隐式括号为:

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

为什么,工作。。。因为coma将函数参数分开,php将其视为:

echo( "$a+$b=", $a+$b);

昏迷算子(,)是最后一个算子。

不同之处在于,,不是一个串联运算符,而是让我们从头开始

echo "$a+$b=". $a+$b;

$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是这样。手册只是说"多种用途"…),因此每个表达式都是单独执行的。

echo "$a+$b=", $a+$b;
echo "$a+$b="; echo $a+$b;
echo "2+4=";echo 2+4;