• 局部变量,全局变量


    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

    这就是需要注意的地方!

     
  • 相关阅读:
    如何通过WallpaperManager(壁纸管理器)设置与修改壁纸?
    Android 4.0 Launcher2源码分析——主布局文件(转)
    android 国际化 横屏(land) 竖屏(port)margin外边距和padding内边距
    轻量数据库SQLiteDataBase的相关操作方法
    Gradle sync failed: Could not find method android() for arguments 错误的解决办法
    本地Gradle配置方法,免去长时间的更新同步等待
    Android Studio and Gradle安装心得
    Error:CreateProcess error=216的错误,JDK版本不匹配问题。
    Docker部署nginx+springboot-web项目
    使用python完成对excel的操作
  • 原文地址:https://www.cnblogs.com/hechunhua/p/3522811.html
Copyright © 2020-2023  润新知