博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
php中在局部作用域内访问全局变量
阅读量:5238 次
发布时间:2019-06-14

本文共 1331 字,大约阅读时间需要 4 分钟。

php中,由于作用域的限制,导致变量的访问限制:

1、局部作用域内不能访问全局变量

2、全局作用域内不能访问局部变量

 对于第一种情况,如下代码将不能正常运行:

";//在局部作用域中访问全局作用域变量 } test(); /* 运行结果: Notice: Undefined variable: a in /Users/lyq/mysite/index.php on line 11 a = */?>

 

那么要想在局部作用域内正常使用全局作用域变量,该怎么做呢?

方法一:在局部作用域内,使用global关键字声明与全局作用域变量名称相同的变量即可。原因:这样声明之后,全局作用域内的变量和局部作用域内与之同名的变量指向了同一块内存。让代码说话:

";//在局部作用域中访问全局作用域变量 $a = 100;//通过内部的$a,来修改$a的值   /*     注意:这么做不会销毁变量,因为此时已经有两个引用指向了这块内容,这么做仅仅是断开了一个引用而已     所以,如果解注释下面一行的代码,运行结果依然正常.   */   //unset($a); } test(); echo "在test函数内部修改了\$a的值,此时\$a = $a"; /* 运行结果: a = 1 在test函数内部修改了$a的值,此时$a = 100 */?>

 

方法二:使用$GLOBALS来访问全局变量。

";//在局部作用域中使用$GLOBALS访问全局作用变量 $GLOBALS['a'] = 100;//通过$GLOBALS['a'],来修改$a的值 /* 由于$GLOBALS['a']仅仅是全局变量$a的另一种语法形式,所以使用$GLOBALS['a']并不会 建立新的引用,所以如果调用了下面的代码,程序将不能正常运行,输出结果: a = 1 Notice: Undefined variable: a in /Users/lyq/mysite/index.php on line 21 在test函数内部修改了$a的值,此时$a = */ //unset($GLOBALS['a']); } test(); echo "在test函数内部修改了\$a的值,此时\$a = $a"; /* 运行结果: a = 1 在test函数内部修改了$a的值,此时$a = 100 */?>

 

注意:

通过方法一来使用全局变量$a,实际上是建立了一个新的引用,所以如果使用unset($a),这个时候是不会销毁变量的。如果将方法一代码的"//unset($a);"解注释后运行,仍然能输出正确的结果。但是$GLOBALS['a']仅仅是是全局变量的的另一种语法形式,并没有建立新的引用,所以,如果解注释方法二中的"//unset($GLOBALS['a']);",程序将无法正常运行。

 

转载于:https://www.cnblogs.com/benbenzhu/p/5591794.html

你可能感兴趣的文章
FTTB FTTC FTTH FTTO FSA
查看>>
OpenAI Gym
查看>>
stap-prep 需要安装那些内核符号
查看>>
网易杭研后台技术中心的博客 -MYSQL :OOM
查看>>
第二章 数据通信的基础知识 计算机网络笔记 学堂在线 2.1 数据传输系统 2.2 信号...
查看>>
如何解决click事件的重复触发问题
查看>>
2016寒假自学笔记
查看>>
VC++2012编程演练数据结构《21》二叉排序树
查看>>
linux命令mkdir&chmod&chown
查看>>
python3之memcached
查看>>
cout与cerr
查看>>
xxl-job 源码分析系列(1)- 配置运行
查看>>
tcpdump截帧工具使用
查看>>
Android中的多线程断点下载
查看>>
asp.net 本质论学习
查看>>
ASP.NET Web API上实现 Web Socket
查看>>
软件测试(2048小游戏测试用例)
查看>>
PBXCp Error
查看>>
[poj 3539] Elevator (同余类bfs)
查看>>
[tyvj2054] 四叶草魔杖 (最小生成树 状压dp)
查看>>