PHP变量作用域

PHP变量的4个作用域

在PHP脚本的任何位置都可以声明变量,但是,声明变量的位置会大大影响访问变量的范围。这个可以访问的范围称为作用域scope。

PHP变量有4种作用域:

  • 局部变量
  • 函数参数
  • 全局变量
  • 静态变量

局部变量

在函数内部声明的变量就是局部变量,它保存在内存的栈中,所以速度很快。

局部变量很有用,因为它消除了出线意外副作用的可能性。

函数参数

参数可以按值传递,也可以按引用传递。

任何接受参数的函数都必须在函数首部中声明这些参数。

全局变量

与局部变量相反,全局变量可以在程序的任何地方访问。

只要在变量前面加上关键字GLOBAL,就可以将其识别为全局变量。

  1. <?php  
  2.     $var = 15;  
  3.       
  4.     function add() {  
  5.         GLOBAL $var;  
  6.         $var++;  
  7.         print "var is $var";  
  8.     }  
  9.     add();  
  10. ?>  

如果省略GLOBAL $var;这行代码,变量$var的值在程序运行后的值为1,因为$var在函数add()中被认为是一个局部变量。这个局部声明将隐含地设置为0,然后是1,最后显示的值就是1。

静态变量

函数参数在函数退出时会撤消,而静态变量则不同,静态变量在函数退出时不会丢失值,并且再次调用此函数时还能保留这个值。

在变量名前加上关键字STATIC就可以声明一个静态变量:

  1. <?php  
  2.     function keep_track() {  
  3.         STATIC $count = 0;  
  4.         $count++;  
  5.         print $count;  
  6.         print "<br>";  
  7.     }  
  8.       
  9.     keep_track();  
  10.     keep_track();  
  11.     keep_track();  
  12. ?>  

如果变量$count未指明为STATIC,就是说,$count就会成为一个局部变量,输出将会是“1 1 1”。

但是,因为$count是静态的,它会在每次执行函数时保留前面的值,所以输出为“1 2 3”

静态作用域对递归函数很有用。

递归函数recursive function是一个功能强大的编程概念,它是一个可以重复调用自身的函数,直到满足某个条件为止。

posted @ 2017-01-10 17:11  天涯海角路  阅读(253)  评论(0)    收藏  举报