zoukankan      html  css  js  c++  java
  • 局部变量,全局变量

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

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

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

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

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

    例一:my

    <?php
    //$GLOBALS['he']="hechunhuae";
    function Test()
    {
    global $he;
    $he="hehehehe";
    }
    Test();
    echo $he."<br />";

    $chun="chunchunchun";
    if($chun){
    $chun1=$chun;
    }else{
    $chun1="111111";
    }
    echo $chun1."<br />";

    $hua="hua";
    for($n=1;$n<5;$n++){
    $hua.=$n;
    $hua1.=$n;
    }
    echo $hua1;
    ?>

    例二:

    C语言:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include<stdio.h>

    int foo()
    {
    int bar;
    bar = 3;
    }

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

    PHP语言:

    1
    2
    3
    4
    5
    6
    7
    <?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语言:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    #include<stdio.h>

    int main()
    {
    int foo = 1;
    if(1)
    {
    int bar = foo;
    printf("%d ",bar);
    }

    while(1)
    {
    int bar = foo;
    printf("%d ",bar);
    break;
    }

    return 0;
    }
    输出:

    1

    1

    PHP语言:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
    $foo = 1;
    if(1)
    {
    $bar = $foo;
    echo $bar," ";
    }

    while(1)
    {
    $bar = $foo;
    echo $bar," ";
    break;
    }
    输出:

    1

    1

    但是不一样的地方来了。

    C语言:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    #include<stdio.h>

    int main()
    {
    int foo = 1;
    if(1)
    {
    int bar = foo;
    printf("%d ",bar);
    }

    printf("%d ",bar);

    while(1)
    {
    int bar = foo;
    printf("%d ",bar);
    break;
    }

    printf("%d ",bar);

    return 0;
    }
    报错:

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

    PHP语言

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <?php
    $foo = 1;
    if(1)
    {
    $bar = $foo;
    echo $bar++," ";
    }

    echo $bar," ";

    while(1)
    {
    $bar2 = $foo;
    echo $bar2++," ";
    break;
    }

    echo $bar2," ";
    输出:

    1

    2

    1

    2

    这就是需要注意的地方!

     
  • 相关阅读:
    [WPF系列] window自定义
    [WPF系列]-Prism+EF
    C#基础-事件 继承类无法直接引发基类的事件
    [WPF系列] 高级 调试
    [WPF系列]-DynamicResource与StaticResource的区别
    [WPF系列]-DataBinding 绑定计算表达式
    [WPF系列]- Style
    [WPF系列]-基础 TextBlock
    [WPF系列]-ListBox
    [WPF系列]-DataBinding 枚举类型数据源
  • 原文地址:https://www.cnblogs.com/hechunhua/p/3522811.html
Copyright © 2011-2022 走看看