www.adminn.cn
站长正能量分享网!

PHP的变量类型和作用域详解

AD:阿里云服务器企业会员更优惠 腾讯云香港,韩国免备案服务器1.8折优惠

什么是变量的作用域?变量的作用域是指在脚本的一次生命周期内变量的有效范围。一般来说有全局和局部之分。

PHP中变量的作用域可以分为:超全局(全局变量的特殊类型,在局部范围里可直接使用),全局,局部,静态(是局部变量的特殊类型)。

在PHP中,全局变量实际上是静态全局变量,如果不用unset显式的释放,那么等脚本运行结束全局变量才会被释放掉。

局部静态变量细分可以是 局部静态函数变量(函数中声明的static变量),局部静态成员变量(类中声明的 static 属性,被所有类实例共享)。

局部静态变量只有脚本运行结束才会被自动释放。

超全局变量:在一个脚本的任何作用域里都可以被访问,这些都是PHP内置的,代码如下:

  1. $GLOBALS 
  2. $_SERVER 
  3. $_GET 
  4. $_POST 
  5. $_FILES 
  6. $_SESSION(持久化存储) 
  7. $_COOKIE(持久化存储) 
  8. $_REQUEST 
  9. $_ENV 

全局变量:声明的变量不在class,function,if等语言结构内部,如果要在class,function,if等语言内部使用,需要用关键词global或者超全局变量$GLOBALS

静态变量: 在function中使用关键词static声明的变量,静态变量的值保留直至脚本结束。

局部变量:在class,function,if/while/for等结构语句内部声明的变量。

1.global关键词和$GLOBALS实例,代码如下:

  1. <?php 
  2. $a = 0; 
  3. function foo() 
  4.     global $a
  5.     echo $a
  6. function foo2() 
  7.     echo $GLOBALS['a']; 

2.static 变量和普通局部变量区别实例,代码如下:

  1. <?php 
  2. function foo1() 
  3.     $var = 0; 
  4.     $var++; 
  5.     return $var
  6. echo foo1(); 
  7. echo foo1(); 
  8. //输出都是1 
  9. function foo () 
  10.     static $var = 0; 
  11.     $var++; 
  12.     return var
  13. echo foo(); 
  14. echo foo(); 
  15.  
  16. //第一次输出1 第二次2 

3.static 关键词还可以声明静态属性和静态方法

静态属性只能被类调用,而不能被类实例调用

静态方法里不能使用$this,只能用self访问类的静态属性

另外理解static变量的一段代码:

  1. <?php 
  2. class t 
  3.         static $v = 10; 
  4.         public function a() 
  5.         { 
  6.                 static $var = 10; 
  7.                 $var++; 
  8.                 echo $var . "<br>\n"
  9.         } 
  10.         public static function aa() 
  11.         { 
  12.                 self::$v++; 
  13.                 echo self::$v . "<br>\n"
  14.         } 
  15. $o1 = new t(); 
  16. $o1->a();//输出11 
  17. $o2 = new t(); 
  18. $o2->a();//输出12 
  19. t::aa();//输出11 
  20. $o1->aa();//输出12 
  21. $o2->aa();//输出13 

从上面的代码中,可知如果一个类成员方法中有静态变量,即使是不同的类实例,他们也会共享这个静态变量,尽管这个静态变量不是类静态成员变量,这点容易让人迷惑。

模板优惠价: (点击购买)
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《PHP的变量类型和作用域详解》
文章链接:https://www.adminn.cn/news/8578.html
本站资源模板仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。2021.5月起,网站调整,暂不再分享免费模板。谢谢理解

扫码支付后请联系右侧QQ发送下载地址!!

源码请勿用于任何涉灰站点!净化网络,站长更有责!

支付宝扫一扫打赏