php中关于echo输出,逗号和点的区别的问题,请分析一下每局执行结果的原因;

<?php

$a= 1;
$b= 2;
$c= 3;

echo "$a+$b","$a+$c"; //1+21+3;

echo "$a+$b"."$a+$c"; // 1+21+3;

echo $a+$b,$a+$c; // 34;

echo $a+$b.$a+$c; // 34;

function tect(){

echo '2222';

}

echo '111',tect().'3333'; //11122223333;

echo '111'.tect().'3333';// 22221113333;

?>

首先第一个和第二个echo,php里.表示连接字符串。echo "$a+$b","$a+$c";表示输出了两个字串,等于echo "$a+$b";echo "$a+$c"; 也就是你输出了1+2和1+3,但是在浏览器上看,这两个输出是挨在一起的,所以成1+21+3。而.表示你点号把 "$a+$b"和"$a+$c"两个字串相拼接,所以结果是1+21+3.
然后第三个和第四个echo,“”里面$a+$b是一个字符串,是1+2.而不加“”,是两个int数字相加,而且$a+$b=3,$a+$c=4.同理,你输出了两次结果是34.而.号将3和4转换成了string相拼接,所以也是34.

第五个和第六个echo。tect()里echo出2222,但是没有return,所以tect()的值是空‘’。所以echo '111',tect().'3333';其实是echo '111';
echo ‘2222’,echo ‘'.'3333',所以是11122223333。最后一个,因为tect()里的echo先执行,所以等于echo ‘2222';echo '111'.''.'3333';
所以结果是22221113333

这个问题前面都没什么问题,最主要是在后面的第五和第六个echo,为什么tect()里的echo会先执行呢,这主要看点这个用法,因为在php里面,点是将
左右连接起来,所以在他会先解析左右两边是什么东西,当他解析111的时候会先把111先保存起来,然后解析tect(),这时候因为tect()是输出函数,
所以php会echo,然后再解析333,当他解析完了之后再echo。所以就是22221113333