博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP 全局变量
阅读量:5929 次
发布时间:2019-06-19

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

  一直认为PHP的全局变量与C++、Java全局变量类似,直到最近做项目过程中使用的局变量,才发现需要补充学习下这方面的内容。

一 全局变量的global的定义和使用

  最初,我的需求是这样的:
";?>

  执行代码的结果是:my name is why,而不是执行changeName()后显示what。分析原因,这是因为函数体changeName内$name变量被缺省设置为局部变量,$name的作用域就是在changeName内。于是,修改代码,添加全局变量如下:

";?>

  注意:不能在用global声明变量的同时给变量赋值。像global $name = "why"的使用方式是错误的。

  定义全局变量后执行的结果仍然为my name is why,这个结果让我吃惊。原来,global的正确用法是:"在一个函数中引入外部的一个变量,如果该变量没有通过参数传递进来,那么就通过global引入进来。" 也就是说,当一个函数引用一个外部变量时,可以在函数内通过global来声明该变量,这样该变量就可以在函数中使用了(相当于当作参数传递进来)。那么,再次修改代码:

";?>

  这次的运行结果是:my name is what,说明global是起传递参数的作用,而并非使变量的作用域为全局。再看下面的例子:

";?>

  执行结果为:my name is what,如果在changeName2()中添加global $name,运行结果则是:my name is where。

  综上,global的作用就相当于传递参数,在函数外部声明的变量,如果在函数内想要使用,就用global来声明该变量,这样就相当于把该变量传递进来了,就可以引用该变量了。

  除了使用global参数定义外,还可以使用超全局变量$GLOBAL:

 

";?>

 

  二 global和$GLOBAL

  一个例子:

";$var3 = 1;$var4 = 2;function test2(){ global $var3,$var4; $var4 = &$var3;}test2();echo $var4 . "
";?>

  输出$var2的值为1,$var4的值为2,因为$var3的引用指向了$var4的引用地址。$var4的实际值并没有改变。官方的解释是:$GLOBALS['var']是外部的全局变量本身,global $var是外部$var的同名引用或者指针。意味着$GLOBAL在一个脚本的全部作用域中都可用,在函数或方法中无需执行global $variable; 就可以访问它们。与所有其他超全局变量不同,$GLOBALS在PHP中总是可用的。另一个例子:

";$var2 = 1;function test2(){ global $var2; unset($var2);}test2();echo $var2;?>

  输出结果是$var1不存在,而$var2的值为1。这就证明,$var2只是别名引用,本身的值没有受到任何的改变。也就是说global $var其实就是$var = &$GLOBALS['var'],调用外部变量的一个别名而已!

转载于:https://www.cnblogs.com/zhuyongzhe/p/10280312.html

你可能感兴趣的文章
我的友情链接
查看>>
linux下tomcat开启远程调试
查看>>
编译安装内核
查看>>
一些积累
查看>>
模块化 JS Ajax 请求
查看>>
mile for gallon 汽车省油
查看>>
学习笔记之web worker
查看>>
BGP-MED-2
查看>>
Java类的继承总结
查看>>
通过openpctv简单学习opkg安装与生成包的一些过程
查看>>
存储设备分区,格式化,挂载
查看>>
我的友情链接
查看>>
数据库(杂)
查看>>
SNMP简介
查看>>
个人笔记 Vue.js, Framework7, and Cordova / PhoneGap Template with Babel, Webpack and Hot Reloading...
查看>>
github 上微信判断是否被删除的源码 以及使用解惑
查看>>
MYSQL性能优化分享(分库分表)
查看>>
JAVA 异常库
查看>>
Android笔记:存储相关,getExternalCacheDir, getExternalFilesDir,getExternalStorageDirectory等
查看>>
[每日一题] 11gOCP 1z0-052 :2013-09-23 Oracle11g 内存参数设置...................................C7...
查看>>