PHP 变量作用域

本文最后更新于:2024年3月18日 凌晨

PHP 变量作用域

  • 迄今为止,如果你不使用函数,那么你创建的任何变量都可以在页面的任何地方使用,如果有了函数,那就不是这样了,函数保持它们变量的集合不同于页面和其他函数中的变量。
  • 定义在函数中的变量(包括函数参数)都不能访问函数外部的内容,并且定义在函数外的变量也默认不能访问函数里的内容,下面举例说明:
1
2
3
4
5
$a = 3;
function foo() {
$a += 2;
}
foo();
  • 在函数foo()中的变量$a和外部的变量$a是不同的变量,尽管foo()使用了相加赋值操作符,但是在整个页面的生命周期里外部的$a的值依然是3.而在函数内部,$a的值为2
  • 变量在程序中可见的范围被称为变量的作用域,在函数中创建的变量就在函数的作用域之内(既有函数级的作用域),在函数和对象外部创建的变量有全局作用域,并且存在于函数和对象之外的任何地方,少数由PHP语言自身预处理的变量同时有函数级和全局作用域。

全局变量

  • 如果想在函数中访问一个全局作用域的变量,可以使用global关键字,它的语法是:
1
global var1,var2,...
  • 将前面的示例改为一个global关键字的示例,可以得到:
1
2
3
4
5
6
7
$a =3;
function foo(){
global $a;
$a += 2;
}
foo();
echo $a;
  • 在函数中PHP使用了全局的$a,而不是创建一个名为$a的函数级作用域的新变量,现在,$a`的值显示为5
  • 在使用全局变量或要访问的变量之前,必须在函数中包含global关键字,因为函数参数必须在函数主体之前被声明,所以函数参数不可能成为全局变量。
  • 使用全局变量等效于在$GLOBALS变量中创建一个对变量的引用,也就是说下面两种声明方式等效:
1
2
global $var;
$var = &$GLOBALS['var'];
  • 再函数作用域中创建一个变量,是对全局作用域中的变量$var值得引用。

静态变量

  • 和C相似,PHP支持声明函数变量为静态的(static),静态变量在所有对该函数的调用的时候被初始化,要声明一个函数变量为静态的,可以再第一次使用变量时使用static关键字,通常。静态变量的第一次使用是赋初始值:
1
static var [= value][,...]

示例3-4:静态变量计数。

1
2
3
4
5
6
7
function counter(){
static $count = 0;
return $count++;
}
for($i = 1;$i <= 5;$i++){
print counter();
}
  • 当函数被第一次调用时,静态变量$count被赋值0,该值返回并且​$count加1.当函数结束时,$count并没有像非静态变量一样被销毁,它的值依然保持不变,直到counter()下一次被调用,for循环显示数字0~4

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!