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

PHP 局部变量与全局变量

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

$gVar1 = "hello";

$gVar2 = "world!!";

say_hello();

function say_hello(){

global $gVar1;

echo $gVar1;

echo $gVar2;

}

?>

运行结果:

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

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

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

$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 语言中的作用一样:

say_hello();

say_hello();

say_hello();

function say_hello(){

static $staticVar = 0;

$staticVar+=66;

echo $staticVar;

echo "";

}

?>

输出结果:

66

132

198

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

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

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

TOMORROW 星辰 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权

转载请注明原文链接:PHP 局部变量、静态变量、全局变量和超全局变量的使用和区别

php局部变量和全局变量的区别,PHP局部变量、静态变量、全局变量和超全局变量的使用和区别...相关推荐

  1. C C++中关于全局变量静态变量,extern,static,const的区别与总结

    一.extern 1 基本解释 extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义.此外extern也可用来进行链接指定. 也 ...

  2. java静态变量和实例变量的区别_Java 中静态变量和实例变量区别

    静态变量属于类,该类不生产对象,通过类名就可以调用静态变量. 实例变量属于该类的对象,必须产生该类对象,才能调用实例变量. 在程序运行时的区别: 实例变量属于某个对象的属性,必须创建了实例对象,其中的 ...

  3. 【C语言】局部变量、全局变量,局部静态变量,全局静态变量,extern,static的区别...

    局部变量: 创建在栈区(向下生长),生命周期存在于当前作用域中.     创建时若未初始化,则为随机值. 全局变量: 创建在static区,生命周期一直存在. 创建时若未初始化,则为0. 静态局部变量 ...

  4. python局部静态变量_全局变量、局部变量和静态变量

    全局变量和局部变量在写代码时需要区分清楚,不然会出大问题.不同语言定义不同范围的变量的写法有很大的区别. 那么静态变量是在什么场景下用到呢?我们来假设这样一个场景:在函数内部定义的变量,当程序执行到它 ...

  5. Python 全局变量、局部变量、静态变量 详解

    参考连接: 1. http://blog.csdn.net/eastmount/article/details/48766861 2. http://www.imooc.com/article/146 ...

  6. 类变量、成员变量、实例变量、局部变量、静态变量、全局变量 的解释。

    类体由2部分构成: 一部分是变量的定义; 一部分是方法的定义(一个类中可以有多个方法) 在变量定义部分定义的变量叫做类的成员变量,成员变量在整个类中都有效. (全局变量应该是成员变量的俗称) 在方法体 ...

  7. 堆栈,静态变量和普通变量,静态函数和普通函数的区别

    首先简单介绍一下堆和栈的区别. 1.内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1).栈区(stack)- 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等.其操作方式类似 ...

  8. 深入理解C语言系列之内存和地址的故事(虚拟内存分区、全局变量与静态变量、外部函数内部函数、选择性编译)

    文章目录 一.内存的分区 二.虚拟内存分区 三.变量作用域与静态变量 四.外部函数与内部函数 五.include与define选择性编译 一.内存的分区 1.内存分为:物理内存和虚拟内存. 物理内存︰ ...

  9. 2020-11-28(全局变量和局部静态变量)

    常量和全局变量有着相似的特征,都是在程序执行前就存在了.在大多数情况下,在PE文件中的只读数据节中常量的节属性被修饰为不可写:而全局变量和静态变量则在属性为可读写的数据节中. 具有初始值的全局变量,其 ...

最新文章

  1. wpf--------------datagrid全选反选 多选进行删除操作 前后台
  2. wireshark 抓包再利用TCP socket发送包里的payload是可以实现登陆的
  3. OpenCASCADE:形状愈合之通用拆分工具
  4. Java EE拦截器
  5. 前端学习(592):使用snippets辅助debugging
  6. 【华为大咖分享】4.反脆弱,高效能组织的能力构建(后附PPT下载地址)
  7. python爬虫什么结构好_python爬虫入门:爬虫基础了解一下 !! 盘它
  8. Spring读书笔记(一)
  9. Spring Cloud学习系列第三篇【服务容错保护】
  10. Rsync 实现远程同步
  11. 菜鸟晋级必修 智能手机越狱/解锁/刷机完全教程
  12. 渗透自学(三)SQL注入(一)
  13. MATLAB矩阵基础知识(二)
  14. 2006中秋节短信,最新中秋节祝福短信
  15. 使用mysql数据库_wuli大世界_新浪博客
  16. 永恒的风控:大宗商品贸易融资背后的核心风险该如何规避?
  17. 计算机更改为英语,win7如何修改语言 电脑语言改成英文的方法
  18. 天龙 - Terrain
  19. 瓦片地图 cocos
  20. 嵌入式STM32—第一天GPIO实现led呼吸灯

热门文章

  1. win10安装Zookeeper3.4.14
  2. trie-51nod1526 分配笔名
  3. 2021年化工自动化控制仪表考试题及化工自动化控制仪表模拟试题
  4. 生成微信配置密钥key
  5. Python-Django毕业设计银行理财推荐系统(程序+Lw)
  6. Win10测试模式水印
  7. jspxcms 4.0 mysql 5.0_Jspxcms 9.5.0 发布,Java CMS
  8. 耳机不分主从是什么意思_耳机界的颜值担当-Omthing小方盒
  9. 《不平等的童年》这本巨著,熬夜也要看完
  10. 电脑贴纸对电脑有害吗?2个点描述这把“双刃剑”