PHP 中从变量的范围上可以分为 4 类,分别是静态变量、局部变量、全局变量和超全局变量
【局部变量与全局变量】
在 PHP 中中全局变量和局部变量的定义是和 C 语言类似的。
在函数外定义的变量称为全局变量,在函数内定义的是局部变量。
但是,想要在函数内部使用全局变量却不可以直接使用,而是要先通过 global 关键字声明:
<?php $gVar1 = "hello"; $gVar2 = "world!!"; say_hello(); function say_hello() { global $gVar1; echo $gVar1; echo $gVar2; }
运行结果:
hello Notice: Undefined variable: gVar2 in E:\Wnmp\html\index.php on line 11
可以看到,结果只输出了 hello,然后就报错了。
因为在函数外定义了两个全局变量,而在函数内部只有$gVar1用 global 关键字声明了,所以能正常输出 hello。
因为$gVar2没有 global 声明,所以,PHP 认为$gVar2是一个局部变量,而函数内部又没有定义该局部变量,所报错说:Undefined variable:gVar2 …
在函数内部使用全局变量还可以通过$GLOBALS 数组实现:
<?php $gVar1 = "hello"; $gVar2 = "wzxaini9.cn !!!"; hello(); function hello() { $localVar = $GLOBALS['gVar1'] . " " . $GLOBALS['gVar2']; echo $localVar; }
输出结果:
hello wzxaini9.cn !!!
【超全局变量】
上面所用的这个$GLOBALS 其实是一个超全局变量,超全局变量的生效范围要比全局变量大。
超全局变量只要被定义了,无论是在函数外部还是函数内部,都可以直接使用,无需额外的声明(与 C 语言的全局变量一样)。
PHP 预定义变量中的超全局变量:
$GLOBALS
$_SERVER
$_GET
$_POST
$_FILES
$_COOKIE
$_SESSION
$_REQUEST
$_ENV
【静态变量】
静态变量和 C 语言中的作用一样:
<?php hello(); hello(); hello(); function hello() { static $staticVar = 0; $staticVar+=66; echo $staticVar; echo "</br>"; }
输出结果:
88 176 264
可以看到调用三次函数,输出的结果是不一样的。
因为静态变量只会进行一次初始化定义,虽然它的生效范围仅限于函数内部,然而,它的生命周期却不等于函数的生命周期。
也就是说当函数执行完并返回后,静态变量是不会像局部变量一样被销毁的,而是保持着函数返回之前的状态,等待函数的下一次调用。
登录后可发表评论