全局变量:global与$GLOBALS的区别和使用

今天在写框架的时候想把SaeMySQL初始化之后作为全局变量使用。但是后来发现PHP中的全局变量和Java或者OC中的全局变量还是有较大区别的。下面记录一下php里面的global的使用相关注意事项。

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

今天在写框架的时候想把SaeMySQL初始化之后作为全局变量使用。
但是后来发现PHP中的全局变量和Java或者OC中的全局变量还是有较大区别的。
下面记录一下php里面的global的使用相关注意事项。
1.有些场合需要全局变量的出现,如下例子:

<?php  
$name="why";//定义变量name,并初始化  
function echoName()  
{  
//试图引用函数外面的变量  
echo "myname is ".$name."<br>";  
}  
echoName();  
/* 何问起 hovertree.com */
?>  

上面的代码的结果为:”myname is” 。而不是期望中的:”myname is why”。因为函数没有传递参数$name的值,企图引用外部变量,不会成功。这时候考虑使用global。

2.于是将上述代码改为

<?php  
global $name="why";//用global声明的同时赋值  
function echoName()  
{  
//试图引用函数外面的变量  
echo "myname is ".$name."<br>";  
}  
echoName();  
/* 何问起 hovertree.com */
?>  

结果为:Parse error: syntax error, unexpected ‘=’, expecting ‘,’ or ‘;’ in http:\\xxxxxxx.com on line 2
也即上述代码有错误。原因是不能在用global声明变量的同时给变量赋值。

3.再次更改上述代码:

<?php  
global $name;  
$name="why";//将global声明与赋值分开  
function echoName()  
{  
//试图引用函数外面的变量  
echo "myname is ".$name."<br>";  
}  
echoName();  
?>  

但是得到的结果依然为:”myname is” ,原因是global的用法不对。

global的正确用法是:”在一个函数中引入外部的一个变量,如果该变量没有通过参数传递进来,那么就通过global引入进来。” 也就是说,当一个函数引用一个外部变量时,可以在函数内通过global来声明该变量,这样该变量就可以在函数中使用了(相当于当作参数传递进来)。

4.于是进一步改动上述代码:

<?php  
$name="why";//定义变量name,并初始化  
function echoName()  
{  
//通过global来声明$name,相当于传递参数  
global $name;  
echo "myname is ".$name."<br>";  
}  
echoName();  
/* 何问起 hovertree.com */
?>

此时得到期望中的结果:”myname is why”。
以上代码说明,global是起传递参数的作用,而并非使变量的作用域为全局。

5.以下代码证明了这一点:

<?php  
$name="why";//声明变量$name,并初始化  
function echoName1()  
{  
//在函数echoName1()里使用global来声明$name  
global  $name;  
echo "the first name is ".$name."<br>";  
}  
/* 何问起 hovertree.com */
function echoName2()  
{  
//在函数echoName2()里没有使用global来声明$name  
echo "the second name is ".$name."<br>";  
}  
echoName1();  
echoName2();  
?>  

结果为:

the first name is why
the second name is

上面的结果说明在函数echoName2()中,$name变量仍然是未知的,因为没有用global来声明,也就没有传递进去。同时也证明了global的作用并不是使变量的作用域为全局。

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

当然,除了通过上述方法外,还可以使用全局数组$GLOBALS来解决问题,在需要用到外部变量的地方,使用$GLOBALS[‘var’]就可以了。例:

<?php  
  
$name="why";//定义变量name,并初始化  
function echoName()  
{  
//通过全局数组$GLOBALS来引用外部变量  
echo "myname is ".$GLOBALS['name']."<br>";  
}  
echoName();  
?>  

得到的结果为:   myname is why 。

推荐:http://www.cnblogs.com/roucheng/p/phpshuzu.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/120287.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • JavaScript中window.open()和Window Location href的区别「建议收藏」

    JavaScript中window.open()和Window Location href的区别「建议收藏」目录1:window.location.href的用法:2:window.open()的用法3:window.open和window.location.href的区别1:区别2.window.open不一定是打开一个新窗口!!!!!!!!3:关于重新定位4.:在框架内指定页面打开连接5:是否打开其他网站地址6:window.open()经过设置后的弹…

    2022年7月12日
    22
  • java treetable_在Swing中创建TreeTable | 学步园

    java treetable_在Swing中创建TreeTable | 学步园TreeTable是Tree和Table的一个结合-就是一个即能够展开和收起行,同时也能够显示多个列的组件。在Swing的标准包里没有一个叫做JtreeTable的组件,但是我们很容易通过把Jtree做成Jtable的渲染器来创建一个这样的组件。这篇文章就是关于如何使用该技术来创建一个TreeTable。最后实现一个名为TreeTableExample0的例子程序,该例子实现了一个TreeTabl…

    2022年6月4日
    52
  • java中数组的下标的数据类型是_java返回数组下标

    java中数组的下标的数据类型是_java返回数组下标packagepractice;publicclassArrayElementsAddIndices{ publicstaticvoidmain(String[]args){ intarray[]={5,4,3,2,1,6,7,8,9}; System.out.println(“原数组中的元素:”); for(inti=0;i<array.length;i++){ System.out.print(array[i

    2022年10月11日
    3
  • 怎么让联想计算机升级,联想电脑怎么升级win11?联想电脑升级win11的几种方法…

    怎么让联想计算机升级,联想电脑怎么升级win11?联想电脑升级win11的几种方法…最近刚发布的windows11的消息,但是很多朋友使用联想电脑的朋友不知道怎么升级win11。戴尔电脑升级win11的方法有很多,可以通过win10系统加入WINDOWS预览体验计划,这样就可以将win10升级到win11系统了,也可以采用自己下载win11镜像用u盘的方式升级到win11系统,下面小编就教大家几种将联想电脑升级win11的方法详细步骤。联想电脑升级win11方法一:官方升级法,…

    2022年5月20日
    116
  • java中字符串String格式转化成json格式[通俗易懂]

    java中字符串String格式转化成json格式[通俗易懂]一、将Sting转为Json在开发中,经常是前端发送一串数据过来之后,是通过一个参数带着一串值过来,这一串值是String格式的,但是里面的内容其实是json格式类型的,所以拿到值之后就要将该值转化成json格式,然后获取里面指定的key就可以拿到该值了。JSONObjectjsonObject=JSON.parseObject(tt);这样就可以将一串参数转化成json对象了,然后通过下面指定的key获取特定的值,如下面所示Stringimei=(String)jsonObjec

    2022年8月23日
    14
  • 软件测试的基本理论知识_学软件测试需要什么基础

    软件测试的基本理论知识_学软件测试需要什么基础01软件研发流程1.软件产品软件产品是指向用户提供的计算机软件、信息系统或设备中嵌入的软件或在提供计算机信息系统集成、应用服务等技术服务时提供的计算机软件。2.软件工程软件工程,英文名SoftwareEngineering,是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科。“软件工程是开发、运行、维护和修复软件的系统方法。”这个定义相当概括,它主要强调软件工程是系统方法而不是某种…

    2025年8月22日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号