PHP局部变量、静态变量、全局变量和超全局变量的使用和区别

Web TOMORROW 2个月前 (10-07) 223次浏览 0个评论 扫描二维码
文章目录[隐藏]

首先,PHP 中从变量的范围上可以分为 4 类,分别是静态变量、局部变量、全局变量和超全局变量。

 

PHP 局部变量与全局变量

在 PHP 中中全局变量和局部变量的定义是和 C 语言类似的。在函数外定义的变量称为全局变量,在函数内定义的是局部变量。但是,想要在函数内部使用全局变量却不可以直接使用,而是要先通过 global 关键字声明:

<?php
$gVar1 = "hello";
$gVar2 = "world!!";

say_hello();

function say_hello(){
	global $gVar1;

	echo $gVar1;
	echo $gVar2;
}
?>

运行结果:

PHP 局部变量、静态变量、全局变量和超全局变量的使用和区别

可以看到,结果只输出了 hello,然后就报错了。因为在函数外定义了两个全局变量,而在函数内部只有$gVar1用 global 关键字声明了,所以能正常输出 hello。

因为$gVar2没有 global 声明,所以,PHP 认为$gVar2是一个局部变量,而函数内部又没有定义该局部变量,所报错说:Undefined variable:gVar2 …

 

在函数内部使用全局变量还可以通过$GLOBALS 数组实现:

<?php
$gVar1 = "hello";
$gVar2 = "TOMORROW www.tomorrow.wiki !!";

say_hello();

function say_hello(){
	$localVar = $GLOBALS['gVar1'] . " " . $GLOBALS['gVar2'];
	echo $localVar;
}
?>

输出结果:

hello TOMORROW www.tomorrow.wiki !!

 

PHP 超全局变量

上面所用的这个$GLOBALS 其实是一个超全局变量,超全局变量的生效范围要比全局变量大。

超全局变量只要被定义了,无论是在函数外部还是函数内部,都可以直接使用,无需额外的声明(与 C 语言的全局变量一样)。

 

PHP 预定义变量中的超全局变量:

  • $GLOBALS
  • $_SERVER
  • $_GET
  • $_POST
  • $_FILES
  • $_COOKIE
  • $_SESSION
  • $_REQUEST
  • $_ENV

 

PHP 静态变量

静态变量和 C 语言中的作用一样:

<?php
say_hello();
say_hello();
say_hello();

function say_hello(){
	static $staticVar = 0;
	$staticVar+=66;
	echo $staticVar;
	echo "</br>";
}
?>

输出结果:

66
132
198

可以看到调用三次函数,输出的结果是不一样的。

 

因为静态变量只会进行一次初始化定义,虽然它的生效范围仅限于函数内部,然而,它的生命周期却不等于函数的生命周期。

也就是说当函数执行完并返回后,静态变量是不会像局部变量一样被销毁的,而是保持着函数返回之前的状态,等待函数的下一次调用。

 

 


TOMORROW 星辰 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:PHP 局部变量、静态变量、全局变量和超全局变量的使用和区别
喜欢 (0)
TOMORROW
关于作者:
TOMORROW星辰第一作者。如有疑问或者发现错误,请留言作者。
酷炫的钢铁侠发表我的评论  如需接收评论回复通知,请填写正确的 个人信息
取消评论
表情 加粗 斜体 签到