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


相关推荐

  • resnet18 pytorch_如何搭建服务器

    resnet18 pytorch_如何搭建服务器参照ResNet50的搭建,由于50层以上几乎相同,叠加卷积单元数即可,所以没有写注释。101和152的搭建注释可以参照我的ResNet50搭建中的注释:训练可以参照我的ResNet18搭建中的训练部分:ResNet101和152可以依旧参照ResNet50的网络图片:上代码:ResNet101的model.py模型:importtorchimporttorch.nnasnnfromtorch.nnimportfunctionalasFclassDownSampl

    2022年10月6日
    0
  • Android学习路线指南

    Android学习路线指南前言看到一篇文章中提到“最近几年国内的初级Android程序员已经很多了,但是中高级的Android技术人才仍然稀缺“,这的确不假,从我在百度所进行的一些面试来看,找一个适合的高级Android工程师的确不容易,一般需要进行大量的面试才能挑选出一个比较满意的。为什么中高级Android程序员不多呢?这是一个问题,我不好回答,但是我想写一篇文章来描述下Android的学习路线,期望可以帮助更多的…

    2022年6月11日
    36
  • win11游戏性能提升_win10怎么设置显卡高性能

    win11游戏性能提升_win10怎么设置显卡高性能其实打造一款高性能系统主要要做到以下三点:一、安装纯净的原版系统。二、打开系统的高性能模式,对部分设置进行优化。三、养成良好的使用习惯,在安装软件时,避免某些引起系统卡顿的软件和全家桶、广告软件。安装完纯净版的windows11系统后,可以进行一下的设置优化:一、切换高性能电源计划二、调整性能选项三、调整隐私安全常规设置四、调整隐私安全诊断和反馈设置五、关闭隐私安全搜索权限六、关闭游戏模式七、任务栏设置一、切换高性能电源计划打开系统“开始菜单->所有应用->windows工具

    2022年9月20日
    1
  • VS2010+OSG3.2+CEGUI0.8.4环境下实现简单的HelloWorld程序

    VS2010+OSG3.2+CEGUI0.8.4环境下实现简单的HelloWorld程序VS2010+OSG3.2+CEGUI0.8.4环境下实现简单的HelloWorld程序写文章之前必须要先吐槽一下CEGUI的兼容性,好多函数改了名称换了命名空间,以致于花了好长时间查看自带的Demo文件以及帮助文档,不过最终还是搞出来了,现将整个流程编写如下。1.首先创建工程之前必须先链接OSG以及CEGUI的开发库,根据自身配置路径进行设置,现将本人设置路径贴出来以供参考,如下:包含目录…

    2022年7月24日
    12
  • PHP小程序开发_微信小程序后端语言

    PHP小程序开发_微信小程序后端语言想要快速地开发一个小程序,很多环节都需要注意,微信小程序php后端的开发估计很多人都还很陌生,但是这也是至关重要的,一起来看看开发实例详解吧。1.小程序相对于之前的WEB+PHP建站来说,个人理解为只是将web放到了微信端,用小程序固定的格式前前端进行布局、事件触发和数据的输送和读取,服务器端可以用任何后端语言写,但是所有的数据都要以JSON的形式返回给小程序。2.昨天写了登录注册、忘记密码功能,…

    2022年9月17日
    0
  • 软件测试 黑盒_软件测试黑盒测试报告

    软件测试 黑盒_软件测试黑盒测试报告1、黑盒测试概念      黑盒测试法也称功能测试或数据驱动测试,它是在已知产品所应具有的功能,通过测试来检测每个功能是否都能正常使用,在测试时,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,测试者在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数锯而产生正确的输出信息,并且保持外部信息(如数据库或文件)的完整性…

    2022年9月1日
    1

发表回复

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

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