for($i=0,$n=1; $i<10 || $i=7; $i++,$n++)
{
     echo $i % $n == $n ? $i : 0;
}这段代码最后的结果是多少呀?为什么?

解决方案 »

  1.   

    这是一个死循环!虽然在语法上检查不出来,但是运行的时候是挺不下来的。原因是这样的
        for循环的循环判断表达式是:$i<10 || $i=7,这是一个或的关系,就是说||两边的表达式值只要有一个为真,表达式结果就为真,循环就不会退出。但是,有一个细节一定要说!那就是$i<10 || $i=7在进行||判断时,是先对||前的表达式进行真值判断,如果前面的$i<10为真,那么后面的那个就不再判断了。这就是这个程序为什么是死循环的关键!
        分析你的程序,首先i和n分别是0和1,判断:$i<10时为真,所以||后的$i=7就不做了,所以i仍然为0.
    为了方便观看,我吧跟踪变量后的值写一下,每一个{}表示循环一次后的结果。
    {$i,$n}echo:{0,1}0
    {1,2}0
    {3,4}0
    {4,5}0
    {5,6}0
    {7,8}0
    {9,10}0
    {7,11}0--------这里有变化了!因为$i<10为假,所以继续比较$i=7,这是一个赋值语句,返回值为真!(注意:这不是“==”)
    {8,12}0
    {9,13}0
    {7,14}0---------因为i》=10了,多以又执行$i=7
    {8,15}0后面LZ自己就能分析了吧,是个死循环,因为$i=7永远是真值!还有,为什么全显示0呢,因为i是在7-10之间,取模不可能>i,所以,肯定都是0.IE和Chromes在访问这个页面时全部都卡死了,哈哈,以上的数值变量我是从ZS上跟踪下来的,LZ类似这种问题完全可以自己解决了