当前位置:  首页>> 技术小册>> PHP8入门与项目实战(2)

所谓变量作用域(scope),是指特定变量在代码中可以被访问到的位置。在PHP中有6种基本的变量作用域法则。

(1)内置超全局变量(built-in superglobal variables),在代码中的任意位置都可以访问到。

(2)常数(constants),一旦声明,就是全局性的,可以在函数内外使用。

(3)全局变量(global variables),在代码间声明,可在代码间访问,但是不能在函数内访问。

(4)在函数中声明为全局变量的变量就是同名的全局变量。

(5)在函数中创建和声明为静态变量的变量在函数外是无法访问的,但是这个静态变量的值可以保留。

(6)在函数中创建和声明的局部变量在函数外是无法访问的,并且在本函数终止时失效。

1.超全局变量
superglobal或autoglobal可以称为“超全局变量”或“自动全局变量”。这种变量的特性是,无论在程序的任何地方都可以访问到,无论是函数内还是函数外都可以访问到。而这些“超全局变量”就是由PHP预先定义好以方便使用的。

那么这些“超全局变量”或“自动全局变量”都有哪些呢?

·$GLOBALS:包含全局变量的数组。

·$_GET:包含所有通过GET方法传递给代码的变量的数组。

·$_POST:包含所有通过POST方法传递给代码的变量的数组。

·$_FILES:包含文件上传变量的数组。

·$_COOKIE:包含cookie变量的数组。

·$_SERVER:包含服务器环境变量的数组。

·$_ENV:包含环境变量的数组。

·$_REQUEST:包含用户所有输入内容的数组(包括$_GET、$_POST和$_COOKIE)。

·$_SESSION:包含会话变量的数组。

2.全局变量
全局变量其实就是在函数外声明的变量,在代码间都可以访问,但是在函数内是不能访问的。这是因为函数默认不能访问在其外部的全局变量。

通过下面的实例介绍全局变量的使用方法和技巧。

【例3.5】

  1. <?php
  2. $a=100; // 全局变量
  3. // 访问全局变量
  4. function ff()
  5. {
  6. $b=100; // 局部变量
  7. echo "变量a为: $a"; // 访问全局变量
  8. echo "<br/>";
  9. echo "变量b为: $b"; // 访问局部变量
  10. }
  11. ff(); // 函数内访问全局变量和局部变量
  12. echo "<br/>";
  13. echo "变量a为: $a"; //函数外访问全局变量和局部变量
  14. echo "<br/>";
  15. echo "变量b为: $y"; // 访问局部变量
  16. ?>

本程序运行结果如图3-5所示。

出现上述结果是因为函数无法访问外部全局变量,但是在代码间可以访问全局变量。

如果想让函数访问某个全局变量,可以在函数中通过global关键字来声明,就是要告诉函数,它要调用的变量是一个已经存在或者即将创建的同名全局变量,而不是默认的本地变量。

通过下面的实例介绍global关键字的使用方法和技巧。

【例3.6】

  1. <?php
  2. $a=100; //全局变量
  3. // 访问全局变量
  4. function ff()
  5. {
  6. $b=100; //局部变量
  7. global $a; //函数内调用全局变量
  8. echo "变量a为: $a"; //访问全局变量
  9. echo "<br/>";
  10. echo "变量b为: $b"; // 访问局部变量
  11. }
  12. ff(); // 函数内访问全局变量和局部变量
  13. ?>

本程序运行结果如图3-6所示。

注意:在PHP中,global关键字现在只能引用简单变量,例如:

  1. global $$foo->bar; // 这种写法不支持
  2. global ${$foo->bar}; // 需用大括号来达到效果

另外,读者还可以通过“超全局变量”中的$GLOBALS数组进行访问。
下面通过实例介绍$GLOBALS数组。
【例3.7】

  1. <?php
  2. $a=200; // 全局变量
  3. // 访问全局变量
  4. function ff()
  5. {
  6. $b=100; //局部变量
  7. $a=$GLOBALS['a']; // 通过$GLOBALS数组访问全局变量
  8. echo "变量a为: $a"; // 访问全局变量
  9. echo "<br/>";
  10. echo "变量b为: $b"; // 访问局部变量
  11. }
  12. ff(); // 函数内访问全局变量和局部变量
  13. ?>

本程序运行结果如图3-7所示。

从结果可以看出,上述两种方法都可以实现在函数内访问全局变量。

3.静态变量

静态变量只是在函数内存在,在函数外无法访问。但是执行后,其值保留,也就是说这一次执行完毕后,静态变量的值保留,下一次再执行此函数,这个值还可以调用。

通过下面的实例介绍静态变量的使用方法和技巧。

【例3.8】

  1. <?php
  2. $person = 20;
  3. function showpeople(){
  4. static $person = 5;
  5. $person++;
  6. echo '再增加一位客户, 将会有 '.$person.' 位客户。<br/>';
  7. }
  8. showpeople();
  9. echo $person.'人员。<br/>';
  10. showpeople();
  11. ?>

本程序运行结果如图3-8所示。

【案例分析】:
(1)其中函数外的echo语句无法调用函数内的static $person,它调用的是$person=20。

(2)showpeople()函数被执行两次,这个过程中static $person的运算值得以保留,并且通过$person++进行了累加。


该分类下的相关小册推荐: