全局变量: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)
上一篇 2021年12月27日 下午10:00
下一篇 2021年12月27日 下午11:00


相关推荐

  • Linux中解压zip文件

    Linux中解压zip文件简单记录一下linux中如何解压zip文件首先要安装unzipsudoaptinstallunzip之后可以使用下面命令来解压文件:unzipfile.zip将文件解压到指定文件夹中,如果该文件夹不存在,将会被创建unzipfile.zip-ddirectory…

    2022年5月23日
    54
  • 中国国家航天局:探月工程四期还有三次任务「建议收藏」

    中国国家航天局:探月工程四期还有三次任务「建议收藏」中国国家航天局:探月工程四期还有三次任务

    2022年4月21日
    58
  • String字符串操作之截取

    String字符串操作之截取1、截取字符串substring1.1、java中截取publicstaticvoidmain(String[]args){//uuid获取,importjava.util.UUID;Stringuuid36=UUID.randomUUID().toString();System.out.println(uuid36);////565a58bc-d87a-411d-8a09-e7c3ef28dc4bSt

    2022年5月19日
    66
  • 电阻色环表色环电阻识别表_电阻的色环识别方法

    电阻色环表色环电阻识别表_电阻的色环识别方法色环电阻色环电阻是电子电路中最常用的电子元件,色环电阻就是在普通的电阻封装上涂上不一样的颜色的色环,用来区分电阻的阻值。保证在安装电阻时不管从什么方向来安装,都可以清楚的读出它的阻值。色环电阻的基本单位有:欧姆(Ω)、千欧(KΩ)、兆欧(MΩ)。1兆欧(MΩ)=1000千欧(KΩ)=1000000欧(Ω)。平常使用的色环电阻可以分为四环和五环,通常用四环。其中四环电阻前二环为数字,第三环表

    2025年6月11日
    6
  • tree命令安装

    tree命令安装linux下文件系统是目录树的形式存在,可以通过tree命令显示查看目录树结构。但是在linux系统上并没有tree这个命令,这里进行tree命令安装的讲述。安装tree命令:[root@lijinbutree-1.7.0]#tree-bash:tree:commandnotfound这表示tree命令没有安装。下载最新的tree命令源码压缩包:ftp://mama.inds

    2022年7月24日
    13
  • 关闭防火墙linux出错,linux关闭防火墙【应对办法】

    关闭防火墙linux出错,linux关闭防火墙【应对办法】技术进步带动时代的进步 win7 操作系统的优点各位小伙伴都有目共睹 然而有时还是会出现 linux 关闭防火墙的问题 让小伙伴们感到棘手 其实 linux 关闭防火墙的问题不难突破 那么我们该如何突破 linux 关闭防火墙的困扰呢 下面给大家详细介绍一下 linux 关闭防火墙的应对办法 linux 如何关闭防火墙答 一 Linux 下开启 关闭防火墙命令 1 永久性生效 重启后不会复原开启 chkconfi

    2026年3月16日
    3

发表回复

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

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