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关键字,它的语法是:
- 将前面的示例改为一个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