16080891(Lamp→研讨会)

函数变量的作用域

上一篇 / 下一篇  2007-05-04 11:44:27 / 个人分类:PHP学习笔记

  <?php
    $a = 1; //全局参数
    function Test()
     {
         echo $a; //本地函数
     }
 
    Test();
  ?>

 以上脚本不会有任何输出,因为echo语句引用了一个局部版本的变量$a,而且在这个范围内,它并没有被赋值.读者可能注意到PHP的全局变量和C语言 有一点不同,在C语言中,全局变量在函数中自动生效,除非被局部变量覆盖.这可能引起一些问题,有些人可能漫不经心的改变一个全局变量.PHP中全局变量 在函数中使用时必须声明为全局.

例:
  <?php
     function Test()
      {
         $a = 110;
      }
     echo $a;
  ?>
 同理,以上代码也不会有任何输出.因为$a是在一个函数中被赋值的,其作用域只有在函数内部,当在函数外部访问该变量的时候,是无法访问的.
  虽然变量的作用域限制了变量的访问能力.但是还是可以从函数外部,访问函数内部的变量,从而使得脚本更加灵活以及动态性能更好.PHP允许使用两个关键词 global 和 static 来实现这一点.

  1.Global语句
     Global语句允许从脚本任何位置访问函数内部定义的变量以及从函数内部访问函数内部访问函数外部的变量.因此在声明变量时,必须在变量前面加global关键字.

例:1.使用全局变量
  <?php
    $a = 1;
    $b = 2;
  
    function Sum()
    {
      global $a,$b; //必须使用global关键字声明
      $b = $a + $b;
    }
    Sum();
    echo $b;
  ?>

输出结果: 3

例:2.使用全局变量数组($GLOBALS)
   <?php
     $a = 1;
     $b = 2;
    
     function Sum()
     {
        $GLOBALS["b"] = $GLOBALS["a"] + $GLOBALS["b"];
     }

     Sum();
     echo $b;
   ?>

输出结果: 3

 2.Static语句(静态变量)
  
静态变量仅在局部变量函数域中存在,当程序执行离开此作用域时,其值并不丢失.

例:
  <?php
    function Test()
    {
      $a = 0;
      echo $a;
      $a++;
    }
  ?>
  本函数没有什么用处,因为每次调用时都会将$a的值设为0并输出"0".将变量加1的$a++没用作用,因为一旦退出本函数则变量$a就不存在了.
  
  要写一个不会丢失本次计数值的的计数函数,要将变量$a定义为静态的:
  <?php
     function Test()
     {
      static $a = 0;
       echo $a;
       $a++;
     }
   ?>
 这样,每次调用Test()函数都会输出$a的值并加1.

TAG: PHP学习笔记

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

Open Toolbar