zoukankan      html  css  js  c++  java
  • if、while中变量的作用域问题

    简介:这是if、while中变量的作用域问题的详细页面,介绍了和php,有关的知识、技巧、经验,和一些php源码等。

    class='pingjiaF' frameborder='0' src='http://biancheng.dnbcw.info/pingjia.php?id=340514' scrolling='no'>

    我们知道,函数、类会改变当前变量的作用域。if,while等分支循环结构会继承外部作用域,即外部变量对分支循环结构内部可见。

    但是C语言不支持if,while等分支循环结构内部作用域对外可见,而PHP则不然。

    在PHP中,if,while等分支循环结构中声明的局部变量,在分支循环结构后面仍然有效。

    比如,函数中声明的变量在函数外面是不可见的

    C语言:

    #include<stdio.h>
    
    int foo()
    {
        int bar;
        bar  = 3;
    }
    
    int main()
    {
        printf("%d\n",bar);
        return 0;
    } 
    

    报错:
    scope.c: In function ‘main’:
    scope.c:11: 错误:‘bar’ 未声明 (在此函数内第一次使用)
    scope.c:11: 错误:(即使在一个函数内多次出现,每个未声明的标识符在其
    scope.c:11: 错误:所在的函数内只报告一次。)

    PHP语言:

    <?php
    function foo()
    {
    	$bar = 1;
    }
    
    echo $bar;
    

    报错:
    Notice: Undefined variable: bar in scope.php on line 7
    PHP Notice:  Undefined variable: bar in scope.php on line 7

    而if,while等循环分支结构会继承外部作用域,即外部变量对循环分支结构内部可见

    类似的:

    C语言:

    #include<stdio.h>
    
    int main()
    {
        int foo = 1;
        if(1)
        {
            int bar = foo;
            printf("%d\n",bar);
        }
    
        while(1)
        {
            int bar = foo;
            printf("%d\n",bar);
            break;
        }
    
        return 0;
    }
    

    输出:

    1

    1

    PHP语言:

    <?php
    $foo = 1;
    if(1)
    {
        $bar = $foo;
    	echo $bar,"\n";
    }
    
    while(1)
    {
        $bar = $foo;
        echo $bar,"\n";
        break;
    }
    

    输出:

    1

    1

    但是不一样的地方来了。

    C语言:

    #include<stdio.h>
    
    int main()
    {
        int foo = 1;
        if(1)
        {
            int bar = foo;
            printf("%d\n",bar);
        }
    
        printf("%d\n",bar);
    
        while(1)
        {
            int bar = foo;
            printf("%d\n",bar);
            break;
        }
    
        printf("%d\n",bar);
    
        return 0;
    }
    

    报错:

    scope.c: In function ‘main’:
    scope.c:12: 错误:‘bar’ 未声明 (在此函数内第一次使用)
    scope.c:12: 错误:(即使在一个函数内多次出现,每个未声明的标识符在其
    scope.c:12: 错误:所在的函数内只报告一次。)

    PHP语言

    <?php
    $foo = 1;
    if(1)
    {
        $bar = $foo;
        echo $bar++,"\n";
    }
    
    echo $bar,"\n";
    
    while(1)
    {
        $bar2 = $foo;
        echo $bar2++,"\n";
        break;
    }
    
    echo $bar2,"\n";
    

    输出:

    1

    2

    1

    2

    这就是需要注意的地方!

    爱J2EE关注Java迈克尔杰克逊视频站JSON在线工具

    http://biancheng.dnbcw.info/php/340514.html pageNo:7
  • 相关阅读:
    【BZOJ2599】[IOI2011]Race 树的点分治
    【BZOJ1787】[Ahoi2008]Meet 紧急集合 LCA
    【BZOJ1834】[ZJOI2010]network 网络扩容 最大流+最小费用流
    【BZOJ3012】[Usaco2012 Dec]First! Trie树+拓补排序
    【BZOJ2743】[HEOI2012]采花 离线+树状数组
    【BZOJ2946】[Poi2000]公共串 后缀数组+二分
    【BZOJ2157】旅游 树链剖分+线段树
    【BZOJ2661】[BeiJing wc2012]连连看 最大费用流
    【BZOJ1801】[Ahoi2009]chess 中国象棋 DP
    【BZOJ4236】JOIOJI STL
  • 原文地址:https://www.cnblogs.com/ooooo/p/2245237.html
Copyright © 2011-2022 走看看