• if、while中变量的作用域问题


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

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

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

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

    C语言:01 #include<stdio.h>
    02  
    03 int foo()
    04 {
    05     int bar;
    06     bar  = 3;
    07 }
    08  
    09 int main()
    10 {
    11     printf("%d ",bar);
    12     return 0;
    13 } 


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

    PHP语言:1 <?php
    2 function foo()
    3 {
    4     $bar = 1;
    5 }
    6  
    7 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语言:01 #include<stdio.h>
    02  
    03 int main()
    04 {
    05     int foo = 1;
    06     if(1)
    07     {
    08         int bar = foo;
    09         printf("%d ",bar);
    10     }
    11  
    12     while(1)
    13     {
    14         int bar = foo;
    15         printf("%d ",bar);
    16         break;
    17     }
    18  
    19     return 0;
    20 }


    输出:

    1

    1

    PHP语言:01 <?php
    02 $foo = 1;
    03 if(1)
    04 {
    05     $bar = $foo;
    06     echo $bar," ";
    07 }
    08  
    09 while(1)
    10 {
    11     $bar = $foo;
    12     echo $bar," ";
    13     break;
    14 }


    输出:

    1

    1

    但是不一样的地方来了。

    C语言:01 #include<stdio.h>
    02  
    03 int main()
    04 {
    05     int foo = 1;
    06     if(1)
    07     {
    08         int bar = foo;
    09         printf("%d ",bar);
    10     }
    11  
    12     printf("%d ",bar);
    13  
    14     while(1)
    15     {
    16         int bar = foo;
    17         printf("%d ",bar);
    18         break;
    19     }
    20  
    21     printf("%d ",bar);
    22  
    23     return 0;
    24 }


    报错:

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

    PHP语言
    01 <?php
    02 $foo = 1;
    03 if(1)
    04 {
    05     $bar = $foo;
    06     echo $bar++," ";
    07 }
    08  
    09 echo $bar," ";
    10  
    11 while(1)
    12 {
    13     $bar2 = $foo;
    14     echo $bar2++," ";
    15     break;
    16 }
    17  
    18 echo $bar2," ";

    输出:

    1

    2

    1

    2

    这就是需要注意的地方!

  • 相关阅读:
    Java中的软(弱)引用
    国庆节前夕的夜晚
    Internet连接共享只能上qq不能打开网页的问题解决
    Android多线程研究(9)——读写锁
    JavaScript开发——文件夹的上传和下载
    JS开发——文件夹的上传和下载
    B/S开发——文件夹的上传和下载
    php web开发——文件夹的上传和下载
    asp.net web开发——文件夹的上传和下载
    Java web开发——文件夹的上传和下载
  • 原文地址:https://www.cnblogs.com/ymy124/p/3889623.html
Copyright © 2020-2023  润新知