最新公告
  • 欢迎您光临波比源码,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入我们
  • php 变量作用域学习笔记分享

    变量作用域就是一个变量在页面与函数之间可不可以相互使用,它的作用范围在哪里,下面小编来给大家介绍php变量使用域的一些学习笔记拿出来与大家交流一下。

    在php当中变量的作用范围php手册上是这样描述的

    在用户自定义函数中,一个局部函数范围将被引入,任何用于函数内部的变量按缺省情况将被限制在局部函数范围内。例如如下代码:

    1. <?php 
    2. $a = 1; /* global scope */ 
    3. function Test() 
    4.    echo $a/* reference to local scope variable */ 
    5. Test(); 
    6. ?> 

    这个脚本不会有任何输出,因为 echo 语句引用了一个局部版本的变量 $a,而且在这个范围内,它并没有被赋值。你可能注意到 PHP 的全局变量和 C 语言有一点点不同,在 C 语言中,全局变量在函数中自动生效,除非被局部变量覆盖,上面开个头,下面我来来详细介绍

    在PHP中变量主要有:内置超级全局变量,一般的变量,常量,全局变量,静态变量等.

    ■内置超级全局变量可以在脚本的任何地方使用和可见。即如果我们在一个PHP页面中改变了其中的一个值,那么在其他PHP页面中使用时,它的值也会发生改变。

    ■常量一旦被声明将可以在全局可见,也就是说,它们可以函数内外使用,但是这仅仅限于一个页面之中(包含我们通过include和include_once)包含进来的PHP脚本,但是在其他的页面中就不能使用了。

    ■在一个脚本中声明的全局变量在整个脚本中是可见的,但不是在函数内部,在函数内部的变量如果与全局变量名称相同,以函数内部的变量为准。

    ■函数内部使用的变量声明为全局变量时,其名称要与全局变量的名称一致,在这样的情况下,我们就可以在函数中使用函数外部的全局变量了,这样就可以避免上一种因为函数内部的变量与外部的全局变量名称相同而覆盖了外部变量这样的情况。

    ■在函数内部创建并声明为静态的变量无法在函数外部可见,但是可以在函数的多次执行过程中保持该值,最常见的情况就是在函数的递归执行的过程之中。

    ■在函数内部创建的变量对函数来说是本地的,而当函数终止时,该变量也就不存在了。

    超级全局变量的完整列表如下:

    ■.$GOBALS 所有全局变量数组

    ■.$_SERVER 服务器环境变量数组

    ■.$_POST 通过POST方法传递给该脚本的变量数组

    ■.$_GET 通过GET方法传递给该脚本的变量数组

    ■.$_COOKIE cookie变量数组

    ■.$_FILES 与文件上传相关的变量数组

    ■.$ENV 环境变量数组

    ■.$_REQUEST 所有用户输入的变量数组包括$_GET $_POST $_COOKIE 所包含的输入内容

    ■.$_SESSION 会话变量数组

    1、局部变量

    在函数中声明的变量认为是局部变量,即它只能在该函数中引用,如果在函数外复制,讲被认为是完全不同的另一个变量(即不同于函数中所包含的那个变量)。注意,退出声明变量的函数时,变量及其相应的值就会撤销,代码如下:

    1. $x=4; 
    2. function assignx(){ 
    3. $x=0; 
    4. printf("$x inside function is %d <br/>",$x); 
    5. assignx(); 
    6. printf("$x outside of function is %d <br/>",$x); 
    7.  
    8. //执行结果为 
    9. $ inside function is 0 
    10. $ outside of function is 4 

    2、函数参数

    PHP和其他编程语言一样,任何接受参数的函数都必须在函数首部中声明这些参数。虽然这些参数(值参数)接受函数外部的值,但退出函数后就无法再访问这些参数,代码如下:

    1. function x10($value){ 
    2. $value
    3. $value=$value*10 
    4. return $value

    记住,虽然在声明参数的函数内部可以访问和出力这些函数参数,但当函数执行结束时,参数就会撤销。

    3、全局变量

    全局变量可以在程序的任何地方访问。但是,为了修改一个全局变量,必须要修改该变量的函数中将其显式地声明为全局变量。只要在变量前面加上关键字GLOBAL,就是全局变量。如果将GLOBA关键字放在一个已有的变量前面,则是告诉PHP姚使用同名的变量。

    使用 $GLOBALS 替代 global,代码如下:

    1. <?php 
    2. $a = 1; 
    3. $b = 2; 
    4. function Sum() 
    5.    $GLOBALS["b"] = $GLOBALS["a"] + $GLOBALS["b"]; 
    6. Sum(); 
    7. echo $b
    8. ?> 

    在 $GLOBALS 数组中,每一个变量为一个元素,键名对应变量名,值变量的内容。$GLOBALS 之所以在全局范围内存在,是因为 $GLOBALS 是一个超全局变量。以下范例显示了超全局变量的用处:

    例子 12-3.,演示超全局变量和作用域的例子,代码如下:

    1. <?php 
    2. function test_global() 
    3.    // 大多数的预定义变量并不 "super",它们需要用 'global' 关键字来使它们在函数的本地区域中有效。 
    4.    global $HTTP_POST_VARS
    5.    print $HTTP_POST_VARS['name']; 
    6.    // Superglobals 在任何范围内都有效,它们并不需要 'global' 声明。Superglobals 是在 PHP 4.1.0 引入的。 
    7.    print $_POST['name']; 
    8. ?> 

    使用静态变量

    变量范围的另一个重要特性是静态变量(static variable)。静态变量仅在局部函数域中存在,但当程序执行离开此作用域时,其值并不丢失。看看下面的例子:

    例子12-4. 演示需要静态变量的例子,代码如下:

    1. <?php 
    2. function Test () 
    3.    $a = 0; 
    4.    echo $a
    5.    $a++; 
    6. ?> 

    本函数没什么用处,因为每次调用时都会将 $a 的值设为 0 并输出 "0"。将变量加一的 $a++ 没有作用,因为一旦退出本函数则变量 $a 就不存在了。要写一个不会丢失本次计数值的计数函数,要将变量 $a 定义为静态的:

    例子 12-5,使用静态变量的例子:

    1. <?php 
    2. function Test() 
    3.    static $a = 0; 
    4.    echo $a
    5.    $a++; 
    6. ?> 

    现在,每次调用 Test() 函数都会输出 $a 的值并加一。

    静态变量也提供了一种处理递归函数的方法。递归函数是一种调用自己的函数。写递归函数时要小心,因为可能会无穷递归下去。必须确保有充分的方法来中止递归。一下这个简单的函数递归计数到 10,使用静态变量 $count 来判断何时停止:

    例子 12-6,静态变量与递归函数,代码如下:

    1. <?php 
    2. function Test() 
    3.    static $count = 0; 
    4.    $count++; 
    5.    echo $count
    6.    if ($count < 10) { 
    7.    Test (); 
    8.    } 
    9.    $count–; 
    10. ?> 

    注: 静态变量可以按照上面的例子声明。如果在声明中用表达式的结果对其赋值会导致解析错误。

    例子 12-7.声明静态变量,代码如下:

    1. <?php 
    2. function foo(){ 
    3.    static $int = 0; // correct 
    4.    static $int = 1+2; // wrong (as it is an expression) 
    5.    static $int = sqrt(121); // wrong (as it is an expression too) 
    6.    $int++; 
    7.    echo $int
    8. ?> 

    注意有朋友问我全局静态变量 ,在php中没有全局变量这一说活,php是一种解释型的语言,虽然有static修饰符,但意思与.Net中的完全不一样。

    即使把类中的一个变量声明为static,这个变量也只在当前页面级的应用程序域中有效。

    2、理解变量作用域。

    在方法体外声明的变量,在方法体内是访问不到的。实例代码如下:

    1. <?php    
    2.   $url = "www.phpfensi.com";    
    3.   function _DisplayUrl()    
    4.   {    
    5.       echo $url;    
    6.   }    
    7.   function DisplayUrl()    
    8.   {    
    9.     global $url;    
    10.     echo $url;    
    11.   }    
    12.   _DisplayUrl();    
    13.   DisplayUrl();    
    14. ?>  
    15. <?php 
    16.   $url = "www.phpfensi.com"
    17.   function _DisplayUrl() 
    18.   { 
    19.       echo $url
    20.   } 
    21.   function DisplayUrl() 
    22.   { 
    23.     global $url
    24.     echo $url
    25.   } 
    26.   _DisplayUrl(); 
    27.   DisplayUrl(); 
    28. ?> 

    _DisplayUrl方法是不会显示任何结果,因为变量$url在方法体_DisplayUrl中是无法访问的,在$url前加上global即可,如DisplayUrl方法。

    在方法体中定义的global变量可以在方法体外访问,代码如下:

    1. <?php    
    2.   function _DisplayUrl()    
    3.   {    
    4.       global $myName;    
    5.       $myName='yibin';    
    6.   }    
    7.       
    8.   _DisplayUrl();    
    9.   echo $myName;  //output yibin    
    10. ?>  
    波比源码 – 精品源码模版分享 | www.bobi11.com
    1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
    2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
    3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
    4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
    5. 如有链接无法下载、失效或广告,请联系管理员处理!
    6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
    7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!

    波比源码 » php 变量作用域学习笔记分享

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    波比源码
    一个高级程序员模板开发平台
    升级波友尊享更多特权立即升级