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


相关推荐

  • Java 字符串包含_实现字符串的复制

    Java 字符串包含_实现字符串的复制1问题描述给定一长字符串A和一短字符串B。请问,如何最快地判断出短字符串B中的所有字符是否都在长字符串A中?请编写一个判断函数实现此功能。为简单起见,假设输入的字符串只包含小写英文字母。下面举几个例子。(1)如果字符串A是”abcd”,字符串B是”bad”,答案是包含,因为字符串B中的字母都在字符串A中,或者说B是A的真子集。(2)如果字符串A是”abcd”,字符串B是”bce”,答案是…

    2022年10月9日
    3
  • @NacosInjected private NamingService namingService 为空

    @NacosInjected private NamingService namingService 为空

    2020年11月9日
    2.4K
  • 提升网站权重的方法_怎么快速提升网站权重到4

    提升网站权重的方法_怎么快速提升网站权重到4SEO权重是各大搜索引擎给予网站赋予的评估或评价等级,代表着网站在某领域中的权威性、健康度及成长潜力,网站的权重越高一方面代表其越具权威性,另一方面也代表着搜索引擎对其友好度越强,会在排名、流量和信任度评价给予较好的扶持。权重是一个相对性的概念,即根据某既定指标的整体评价中相对的重要程度。如果用容易理解的方法来说,比如指数是量级统计数据,那么权重便是性质评估数据,互联网平台普遍存在指数和权重相关体系化的数据管理。一、SEO权重与网站的关系1.百度权重是第三方推出,收录与其没直接联系.

    2022年10月6日
    4
  • RFID-RC522的使用[通俗易懂]

    射频识别技术RFID(RadioFrequencyIdentification),又称为电子标签、无线射频识别,是一种非接触式的自动识别技术,通过无线电讯号识别特定目标并读写相关数据而无需识别系统与特定目标之间建立机械或光学接触。可用于识别高速运动物体并可同时识别多个标签,过程中无需人工干预,操作快捷方便。可工作于各种环境,实现对各类物体或设备(人员、物品)在不同状态(移动、静止或恶劣环境)下…

    2022年4月13日
    231
  • 画图软件origin-柱状图断点设置

    画图软件origin-柱状图断点设置OriginLab为中国学生提供了免费半年正版中文OriginPro;注册完毕后登录学校邮箱,请根据邮件提示完成安装注册即可,然后会发送安装教程给你。参考:https://my.originlab.com/forum/topic.asp?TOPIC_ID=22328…

    2022年9月1日
    3
  • MySQL中字段类型为longtext的值导出后显示二进制串「建议收藏」

    MySQL中字段类型为longtext的值导出后显示二进制串「建议收藏」MySQL中字段类型为longtext的字段值保存的是Blob(Binarylargeobjects),所以在导出sql或者将sql查询导出为其他格式的数据时,需要提前将字段类型转换一下,转换方式:使用MySQL的CAST()函数或者CONVERT()函数。语法:CAST(valueastype);CONVERT(value,type);示例:…

    2022年5月14日
    45

发表回复

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

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