<?php
for ($i=1;$i<2;$i++)
{   
    for ($j=1;$j<2;$j++)
    {
        $a=5;
    }
    $b=$a;
    echo $a;
}
echo $a;
echo $b;
echo $i;?>
输出竟然是552,太坑了,能不能解释下为什么这么设计,和C/C++差别太大了,这样岂不是很容易引起变量冲突?

解决方案 »

  1.   

    php 声名的变量作用域没有特殊 标识符都是在当前作用域下。   
      

  2.   

    你认为会是输出什么?
    for ($i=1;$i<2;$i++) //这个循环只会执行一次
    {   
        for ($j=1;$j<2;$j++) //这个循环也只执行一次
        {
            $a=5;
        }
        $b=$a;
        echo $a;
    }
    echo $a; //$a 的值是循环中的最后的最后一次赋值($a=5)
    echo $b; //$b 的值是循环中的最后的最后一次赋值($b=$a)
    echo $i; //循环中止时的 $i 的值有什么不对吗?
    如果你说 和C/C++差别太大了 那么你的 C/C++ 同样没有学好!
      

  3.   

    for ($i=1;$i<2;$i++)
    {   
        for ($j=1;$j<2;$j++)
        {
            $a=5; // $a 赋值为5
        }
        $b=$a;  // $b 赋值为5
        echo $a; // 输出$a的值5
    }
    echo $a; // 输出$a的值5
    echo $b; // 输出$b的值5
    echo $i; // 输出$i的值,因为for($i=1; $i<2; $i++),所以$i只执行了一次$i++,所以$i=2最后输出5 5 5 2,没什么不对。如果是C程序,也是一样的结果。#include <stdio.h>
    #include <stdlib.h>int main(){    int a,b,i,j;    for(i=1; i<2; i++){
            for(j=1; j<2; j++){
                a = 5;
            }
            b = a;
            printf("%d\n", b);
        }    printf("%d\n", a);
        printf("%d\n", b);
        printf("%d\n", i);}