关于PHP里的++,大家认为是什么意思呢,好吧,给大家一个程序,你们看看它的运行结果是什么吧:
<code><?php
$a=0;
$b=0;
if($a=3 || $b=3){
$a++;
        $b++;
}
echo $a,$b;
?></code>
好,程序到此就结束啦!大家先想一下自己的答案,可能你通过执行程序得到了答案,但是为什么会有这个结果呢?想一想然后在向下看吧,如果你了解就不作向下面看啦。
//为了让能有一过思考的过程,防止大家无意看到下面的内容,所以中间将有一些空白部分://
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
      好啦,大家的结果是什么样的,我的结果是11,为什么$a和$b最后会是1呢,先分析一下,php里,或的优先级高于赋值,所以,if里可以写成if($a=(3||$b)=3),那么执行的结果是或的条件在第一次就成立,所以给$a赋值,而没有给$b赋值,所以$b还是等于0,那么$b等于0就清楚啦,下面来看$a,为什么$a也是1 呢,当时我想了很久也没有想能,一开始问题是我把或与赋值的优先级弄错了,但是后来弄对了结果也不是想像中的那样(想像中是2),那么为什么这样呢,后来寝室里的一个同学(30期李子云)启发了我一下---输出if后$a的类型,好,请执行下面的程序:<code><?php
$a=0;
$b=0;
if($a=(3 || $b=3)){
var_dump($a);
}
?></code>
你看到的结果是什么?是不是bool(true)?好吧,继续。问题是输出的时候会输出1,这个还涉及到一个特殊的问题,那就是bool型为真的时候用echo输出的时候是1,假输出的时候为0,那么后面的那个++为什么没有生效呢,问题的答案开始揭晓啦,请执行下面的程序:
<code>
<?php
$a=0;
$b=0;
if($a=(3 || $b=3)){
echo 'if执行后$a的类型及值是:',var_dump($a);
        $a++;
        echo '<br/>$a++后的值及类型是:',var_dump($a);
        $a+1;
        echo '<br/>$a+1后的值及类型是:',var_dump($a);
}</code>
结果一目了然啦,PHP里的++并不是表示加1,如果是直接用+1,那么会涉及到一个类型转换问题,像bool型的真就会转成实型的1计算,也就是低精度的向高精度转。此例就证明啦++并不是表示加1,而是相同类型的加加,有些类型就没有办法++,比如你对一个字符串或数组(当然有些类型是不能进行加1的)等进行++,没有效果是吧,但是你加1试试,类型转换了吧!好吧,讨论到此结束:
结论:PHP里++关不表示加1,面是表示相同类型的++,而有的类型相同类型的没办法++,也就是没有任何效果,以前我总把这个给误以为就是加1是不对地。