zoukankan      html  css  js  c++  java
  • php中局部变量和全局变量

    php中局部变量和全局变量

    代码1:函数内部使用函数外部变量错误方法

    <?php
    $name = 'fish';
    function animal() {
        echo $name;
    }
    animal();

    运行结果:Notice: Undefined variable: name in D:wampwwwindex.php on line 5 
    由此得知,animal()方法中的namename和方法外部的name不是同一个变量。

    如何才能在函数内部访问到函数外部的变量呢?可以在函数内部或者外部将namename变量定义为全局变量,在name之前加上global即可;如下所示:

    代码2:函数内部使用函数外部变量正确方法

    <?php
    $name = 'fish';
    function animal() {
        global $name;
        echo $name;
    }
    animal();

    <?php
    global $name;
    function animal() {
        $name = 'fish';
        echo $name;
    }
    animal();

    运行结果:fish

    那么,如果$name变量是在函数内部定义的,能够在函数外部或者别的函数中使用到吗?答案是显而易见的,不能,这就是局部变量,可以看下下面的代码段:

    代码3:函数外部使用函数内部变量错误方法

    <?php
    function animal() {
        $name = 'fish';
    }
    echo $name;

    运行结果:Notice: Undefined variable: name in D:wampwwwindex.php on line 6 
    $name变量只能在animal()函数内部有意义。问题来了,如果我非要想在函数外部也能使用到函数内部定义的变量该怎么办? 
    “可以在函数内部定义变量时将其声明为global”,请看如下代码段:

    代码4:函数外部使用函数内部变量正确方法

    <?php
    function animal() {
        global $name;
        $name = 'fish';
    }
    animal();
    echo $name;

    运行结果:fish 

    可以看到,我们先执行了animal()方法,然后再使用nameanimal()量name的操作,所以,需要记住的是,函数只有被调用了才有意义,且程序执行的顺序时从上到下,从左往右的。


    局部变量:在函数内部中定义的变量,它的作用域为函数定义范围内。
    全局变量:在函数外部定义的变量,它的作用域从定义处一直到文件结尾。
     
    在php中函数被视为单独的程序片,所以局部变量会覆盖全局变量,即使局部变量中并定义没有全局变量相同的变量,也会被覆盖。
    如下:
    $a=5;
    $b=3;
    function t()
    {
     echo $a-$b;//输出0
    }
    要想在函数中直接使用全局变量可以通过 global关键字声明 或者通过php中自定义的$GLOBALS数组获取
    function t()
    {  
     global $a,$b;
     echo $a-$b;
    }

    function t()
    {
     echo $GLOBALS['a']-$GLOBALS['b'];
    }


    静态变量:通过static 定义一个静态变量, 如: 
    function test()
    {
     static $t;
    $t++;
    return $t;
    }
    for($i=0;$i<6;$i++)
    {
    echo test()."<br />";
    }
    输出 1 2 3 4 5 
    即静态变量在第一次初始化后,该变量的值就一直存在内存中,不会随着函数而被注销。

    注意:如果在函数中 unset() 一个静态变量,那么在函数内部此静态变量将被销毁。但是,当再次调用此函数时,此静态变量将被复原为上次被销毁之前的值。

  • 相关阅读:
    BZOJ3884 上帝与集合的正确用法 【欧拉定理】
    BZOJ4872 [六省联考2017]分手是祝愿 【期望dp】
    BZOJ4650 [NOI2016]优秀的拆分 【后缀数组】
    BZOJ1562 [NOI2009]变换序列 【KM算法】
    BZOJ2657 [Zjoi2012]旅游(journey) 【树的直径】
    BZOJ3999 [TJOI2015]旅游 【树剖 + 线段树】
    BZOJ3997 [TJOI2015]组合数学 【Dilworth定理】
    BZOJ4823 [Cqoi2017]老C的方块 【最小割】
    坐标系统
    利用键盘左右键使图像左右移动,上下键使图像的两个纹理可见度比例上下调整
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/8861349.html
Copyright © 2011-2022 走看看