zoukankan      html  css  js  c++  java
  • 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

    这就是需要注意的地方!

  • 相关阅读:
    Makefile笔记
    GUN详解
    学习SDL
    [翻译]在ASP.NET MVC中使用TDD与依赖注入
    ASP.NET MVC Preview 3 STEP BY STEP 文章管理实例(二)
    一个小Forum Web程序示例,ASP.NET MVC Framework,TDD简介(Part 2)
    一个小Forum Web程序示例,ASP.NET MVC Framework,总体结构介绍(Part 1)
    ASP.NET MVC Preview 4 源代码学习笔记 FilterAttribute
    在ASP.NET MVC Framework 中执行简单验证(翻的)
    一个小Forum Web程序示例,SqlForumRepository,LazyList和PagedList(Part 3)
  • 原文地址:https://www.cnblogs.com/ymy124/p/3889623.html
Copyright © 2011-2022 走看看