全局变量: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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • nginx中location的使用

    nginx中location的使用

    2021年8月3日
    65
  • 软件工程期末考试题库(超全)[通俗易懂]

    软件工程期末考试题库(超全)[通俗易懂]软件工程期末考试题库选择题具有风险分析的软件生命周期模型是(  C   )。A.瀑布模型      B.喷泉模型  C.螺旋模型        D.增量模型软件工程的基本要素包括方法、工具和(A)。A. 过程        B. 软件系统   C. 硬件环境         D. 人员软件的复杂性是( A),它引起人员通信困难、开发费用超支、开发时间超时等问题。A. 固有的         B. 人为的   C. 可消除的         D. 不可降低的在结

    2022年5月5日
    51
  • Pycharm 实现远程部署和调试,原来这么简单「建议收藏」

    Pycharm 实现远程部署和调试,原来这么简单「建议收藏」一般代码本地调试完成后,需要运行到服务器上,比如自动化测试脚本、爬虫脚本等,所以第一步需要将项目上传到服务器,然后在服务器上进行调试和运行。但是需要长期维护和开发的项目,这样就繁琐了很多,并且我们时常要维护多个测试或者开发环境,每个环境的Python版本和依赖包有可能还存在差异,这样的话,每次更新需要花费的时间就更多了。其实,很多的编辑器都考虑到这个问题,可以实现远程调试,比如Pycharm、Vscode等。Pycharm可以进行远程部署项目(上传和下载),还可以通过配置远程解释器进行远程调..

    2022年8月28日
    0
  • vs生成sln文件_VS二进制文件

    vs生成sln文件_VS二进制文件VisualStudio.NET采用两种文件类型(.sln和.suo)来存储特定于解决方案的设置,它们总称为解决方案文件。为解决方案资源管理器提供显示管理文件的图形接口所需的信息,从而在每次继续开发任务时,不会因开发环境而分散精力;*.sln:(VisualStudio.Solution)通过为环境提供对项目、项目项和解决方案项在磁盘上位置的引用,可将它们组织到解决方案…

    2022年5月3日
    590
  • Gamma校正及其实现

    Gamma校正及其实现图2中左图为原图,中图为gamma = 1/2.2在校正结果,原图中左半侧的灰度值较高,右半侧的灰度值较低,经过gamma = 1/2.2校正后(中图),左侧的对比度降低(见胡须),右侧在对比度提高(明显可以看清面容),同时图像在的整体灰度值提高。右图为gamma = 2.2在校正结果,校正后,左侧的对比度提高(见胡须),右侧在对比度降低(面容更不清楚了),同时图像在的整体灰度值降低。

    2022年6月17日
    19
  • Windows上更换鼠标指针图标「建议收藏」

    今天试着将自己的电脑的指针图标个性化升升级,试了一下还是非常简单。1.打开漫锋网的鼠标下载地址(我们需要的鼠标、壁纸、主题都在这下载,很安全放心进)https://zhutix.com/tag/cursors/2.选择一款自己喜欢的鼠标皮肤,并下载3.下载完成后,解压压缩包,右键下面这个“右键安装.inf”,并选择“安装”4.安装完成后,就已经给我们换上鼠标的皮肤了。当然,我们可…

    2022年4月12日
    224

发表回复

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

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