//第一题
<?php
function test1(){
  $a=1;
  $b=&$a;
  echo (++$a)+(++$a);
}
test1();
//执行的值为6
//第二题

function test2(){
 $a=1;
 $b=&$a;
 echo (++$a)+(++$a)+(++$a);
}
test2();
//执行后的结果是:10
?>

php语言解释

这个其实非常简单,++a这种单目运算符的运算结果还是自身。 所以

<?php

$a=1;
$b=&$a;
echo (++$a)+(++$a);
//换种写法就等同于
$a=1;
$a=++$a; //2
$a=++$a; //3
$a=$a+$a;//3+3=6
?>

哈哈,很多人肯定以为是等于5,然而这个是操作的同一个变量,等同于改变了两次$a的值,最后相加的时候,自然就是改变后的值相加,所以等于6。

正常情况

然而在php中,为了照顾人类的逻辑,默认情况下,即使名字相同的基本类型的变量,也不会使用同一个变量地址,因此,以上代码会被解析为 ```php<?php $a=1; echo (++$a)+(++$a); //换种写法就等同于 $a=1; $a=++$a; //2 $b=++$a; //3 $a=$a+$b;//2+3=5

?>

//但是由于

$b=&$a;
所以结果变成了:3+3 = 6;<br/>
PHP中的糖语法宠坏了那些基础本来不扎实的孩子,对这种加法做了特别的运算处理而已。

第二题<br/>
$b=&$a;<br/>
这个取地址运算只起效了一句运算指令,就是只管事了第一回合,对于以后的运算,php还是用了平常的算法。
```php
<?php
$a=1;
$b=&$a;
echo (++$a)+(++$a)+(++$a);
/*
这段实际上是
$a=++$a; //2
$a=++$a; //3
//注意了,前两个已经得到结果了,第三个我们用一个新的变量$c。
$c=++$a; //4
$a=$a+$a; //3+3=6
$a=$a+$c; //6+4=10
?>