类内部使用global 全局变量量为什么不用声明为global

PHP Global定义全局变量使用说明
字体:[ ] 类型:转载 时间:
Global是php中一个比较特殊的命令,大家直接叫他超级全局变量了,下面我来介绍我今天在使用Global定义全局学习笔记了
很不习惯PHP中的变量作用域,PHP中函数变量和全局是完全隔绝的,也就是无法相互访问。比如下面这样: 代码如下:$test = 123;&abc(); //这里什么都不输出,因为访问不到$test变量function abc(){&&& echo($test);}$test = 123;abc(); //这里什么都不输出,因为访问不到$test变量function abc(){&&& echo($test);}如果,你想在函数内部访问外部变量,你需要这样: 代码如下:$test = 123;&abc(); //输出123function abc(){&&& global $&&& echo($test);}$test = 123;abc(); //输出123function abc(){&&& global $&&& echo($test);}但如果我们在函数中定义全局变量呢,像下面这样: 代码如下:function abc(){&&& global $&&& $test = 123;}abc();echo($test); //输出123function abc(){&global $&$test = 123;}abc();echo($test);//输出123通过这种方式,我们可以在外部访问到函数内部定义的变量在用户自定义函数中,一个局部函数范围将被引入。任何用于函数内部的变量按缺省情况将被限制在局部函数范围内(包括include 和 require 导入的文件内的变量)!解释:A.php文件的内Test_Global是定义好的第三方函数,该函数用include导入了B.php文件内的$a的global全局变量,所以$a被限制在Test_Global局部函数范围内,所以B.php文件内的$a的作用范围都在Test_Global内,而不是作用了整个A.php内….解决方案:1. 冲出局部函数&//A.php 文件 代码如下:&?phpfunction Test_Global(){&&&&& Test();&&}&&include 'B.php';&& //将include 从局部Test_Global函数中移出$a = 0 ;Test_Global();echo $a;?&&//B.php 文件&?phpfunction Test(){&&& global $a;&&& $a =1;}?&2.优秀的访问器 代码如下://A.php 文件&?phpinclude 'B.php';&$a =0;Set_Global($a);echo $a;?&&//B.php 文件&?phpfunction Set_Global(&$var){&&& $var=1;}?&
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具关于函数内部调用全局变量的问题_PHP技巧_动态网站制作指南
关于函数内部调用全局变量的问题
来源:人气:445
关于函数内部调用全局变量的问题
这个问题遇到了两次,两次都在这里跌倒,还好浩哥及时提醒主要原因如下:$db和$dbsel都是由外部引入的sql类的所以在函数内部使用时必须要用global声明,因为函数内部使用的变量都是通过函数的参数进行传递的,在这里没有穿$db和$dbsel。还有一个问题:就是关于生成二维码的问题:以前一直用qrcode 类进行自己生成,不知道还可以直接调用网上的免费接口打开百度-&搜索二维码API-&点击进去就能看到她的参数个数以及传递格式 这里要注意一下的是 携带的链接地址如果太长的话,要进行长连接的处理 百度搜索长连接转短连接
转出的短连接是长期有效的,没有过期时间
优质网站模板Pages: 1/2
主题 : 怎么定义全局变量
级别: 精灵王
可可豆: 4360 CB
威望: 4317 点
在线时间: 800(时)
发自: Web Page
怎么定义全局变量&&&
定义了一个MyGlobal.h,里面有一个 NSString *customN   将这个anInt作为所有的类都可以修改的变量,即类A修改它后,其它类如果在访问这个变量——得到是类A修改后的结果。在类A中的.m这样写的     extern NSString *customN在类B中的.m也是这样写的   extern NSString *customN结果在编译进报错:Command /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/g++-4.2 failed with exit code 1详细信息如下:ld: duplicate symbol _customName in /Users/mymac/Desktop/MyApps/AppTest_903/build/AppTest.build/Debug-iphonesimulator/AppTest.build/Objects-normal/i386/AppTestViewController.o and /Users/mymac/Desktop/MyApps/AppTest_903/build/AppTest.build/Debug-iphonesimulator/AppTest.build/Objects-normal/i386/AppTest nAppDelegate.o这是什么原因造成的呢?或者说我该怎样定义全局变量呢?谢谢,提问完毕!期待解答...[ 此帖被alix在 10:32重新编辑 ]
级别: 精灵王
可可豆: 7948 CB
威望: 7895 点
在线时间: 563(时)
发自: Web Page
你把这个NSString *customName声明放到主控制器的.m文件最上面就可以了!为什么,我暂时不是很清楚!
级别: 精灵王
可可豆: 4360 CB
威望: 4317 点
在线时间: 800(时)
发自: Web Page
回 1楼(jimney) 的帖子
谢谢,试了一下,还是不行 &&
级别: 精灵王
可可豆: 4360 CB
威望: 4317 点
在线时间: 800(时)
发自: Web Page
补充一下:我是要在几个类中共有这个变量,也就是说好几个类都要改变它的值,一个变后其它的也变。虽然这样不安全了,浪费了面向对象。。但编定代码会少一点点儿。。。?
级别: 精灵王
可可豆: 7948 CB
威望: 7895 点
在线时间: 563(时)
发自: Web Page
这样做是没问题的,我之前一直这样定义的。之前解释的又点模糊,对于跨文件的全局变量,使用extern,表示此变量已在其他文件中定义,因为全局变量是程序开始执行时,就已经被存放在静态区中,所以你在任何一个头文件的.m中定义都可以,同时在其他类文件中使用extern来引用,在.m中定义,更方便些吧,头文件中定义,还得引用头文件!这个其实就是C语言中全局变量的概念,还有静态全局变量。。。LZ最好自己去搜一下,了解很详细,全面!
级别: 精灵王
可可豆: 4360 CB
威望: 4317 点
在线时间: 800(时)
发自: Web Page
回 4楼(jimney) 的帖子
谢谢,我以前是做C开发的,用的是BC黑屏下开发,基本上是全是全局变量,extern放在这儿不能用了...所以就。可能是把全局变量的声明放在了.h文件中的原因,并且在.m文件中并&&未引入&&那个.h(引入是错误地),而是用的extern var_type var_结果报重复定义错误.不过现在解决了,也安全了,我用了OO的功能,在每个类中都有那个变量,然后写了一个方法,一个类中改变它的值,其它类中也改变。。。只是多了几十行代码了。。。回头在试试全局变量在objc中的实现,谢谢@jimney
级别: 新手上路
可可豆: 190 CB
威望: 190 点
在线时间: 65(时)
发自: Web Page
学习一下!!
级别: 新手上路
UID: 57410
可可豆: 191 CB
威望: 190 点
在线时间: 440(时)
发自: Web Page
回 5楼(alix) 的帖子
请问楼主 oo功能是如何做的 最近也对这个问题有点困惑 老是搞不好
级别: 新手上路
可可豆: 85 CB
威望: 85 点
在线时间: 42(时)
发自: Web Page
回 5楼(alix) 的帖子
求你写的那个方法,我也遇到同样的问题~~~
级别: 精灵王
可可豆: 4360 CB
威望: 4317 点
在线时间: 800(时)
发自: Web Page
// global.h#ifndef GLOBAL_H#define GLOBAL_Hextern NSString* global1;extern NSString* global2;...#endif// global.m#import &global.h&static NSString* global1 = @&g1&;static NSString* global2 = @&g2&;
Pages: 1/2
关注本帖(如果有新回复会站内信通知您)
发帖、回帖都会得到可观的积分奖励。
按"Ctrl+Enter"直接提交
关注CocoaChina
关注微信 每日推荐
扫一扫 关注CVP公众号
扫一扫 浏览移动版全局对象与全局变量介绍
服务器君一共花费了499.882 ms进行了5次数据库查询,努力地为您提供了这个页面。
试试阅读模式?希望听取您的建议
全局对象的概念
JavaScript通过函数管理作用域。在函数内部声明的变量只在这个函数内部可用,而在函数外面不可用。另一方面,全局变量就是在任何函数外面声明的或是未声明直接简单使用的。
每个JavaScript环境有一个全局对象,当你在任意的函数外面使用this的时候可以访问到。你创建的每一个全局变量都成了这个全局对象的属性。在浏览器中,方便起见,该全局对象有个附加属性叫做window,此window(通常)指向该全局对象本身。下面的代码片段显示了如何在浏览器环境中创建和访问的全局变量:
myglobal = "nowamagic";
// 不推荐写法
console.log(myglobal);
// "hello"
console.log(window.myglobal);
// "hello"
console.log(window["myglobal"]);
// "hello"
console.log(this.myglobal);
// "hello"
谨慎使用全局变量
全局变量的问题在于,你的JavaScript应用程序和web页面上的所有代码都共享了这些全局变量,他们住在同一个全局命名空间,所以当程序的两个不同部分定义同名但不同作用的全局变量的时候,命名冲突在所难免。
web页面包含不是该页面开发者所写的代码也是比较常见的,例如:
第三方的JavaScript库
广告方的脚本代码
第三方用户跟踪和分析脚本代码
不同类型的小组件,标志和按钮
比方说,该第三方脚本定义了一个全局变量,叫做result;接着,在你的函数中也定义一个名为result的全局变量。其结果就是后面的变量覆盖前面的,第三方脚本就一下子嗝屁啦!
因此,要想和其他脚本成为好邻居的话,尽可能少的使用全局变量是很重要的。一些减少全局变量的策略,例如命名空间模式或是函数立即自动执行,但是要想让全局变量少最重要的还是始终使用var来声明变量。
由于JavaScript的两个特征,不自觉地创建出全局变量是出乎意料的容易。首先,你可以甚至不需要声明就可以使用变量;第二,JavaScript有隐含的全局概念,意味着你不声明的任何变量都会成为一个全局对象属性。参考下面的代码:
function sum(x, y) {
// 不推荐写法: 隐式全局变量
result = x +
此段代码中的result没有声明。代码照样运作正常,但在调用函数后你最后的结果就多一个全局命名空间,这可以是一个问题的根源。
经验法则是始终使用var声明变量,正如改进版的sum()函数所演示的:
function sum(x, y) {
var result = x +
另一个创建隐式全局变量的反例就是使用任务链进行部分var声明。下面的片段中,a是本地变量但是b确实全局变量,这可能不是你希望发生的:
// 反例,勿使用
function foo() {
var a = b = 0;
此现象发生的原因在于这个从右到左的赋值,首先,是赋值表达式b = 0,此情况下b是未声明的。这个表达式的返回值是0,然后这个0就分配给了通过var定义的这个局部变量a。换句话说,就好比你输入了:
var a = (b = 0);
如果你已经准备好声明变量,使用链分配是比较好的做法,不会产生任何意料之外的全局变量,如:
function foo() {
// ... a = b = 0; // 两个均局部变量
然而,另外一个避免全局变量的原因是可移植性。如果你想你的代码在不同的环境下(主机下)运行,使用全局变量如履薄冰,因为你会无意中覆盖你最初环境下不存在的主机对象(所以你原以为名称可以放心大胆地使用,实际上对于有些情况并不适用)。
延伸阅读此文章所在专题列表如下:
本文地址:,欢迎访问原出处。
不打个分吗?
转载随意,但请带上本文地址:
如果你认为这篇文章值得更多人阅读,欢迎使用下面的分享功能。
小提示:您可以按快捷键 Ctrl + D,或点此 。
大家都在看
现代魔法研究协会欢迎你
阅读一百本计算机著作吧,少年
马丁 (作者), 邓辉 (译者)
《敏捷软件开发:原则模式与实践》由享誉全球的软件开发专家和软件工程大师Robert C.Martin将向您展示如何解决软件开发人员、项目经理及软件项目领导们所面临的最棘手的问题。这本综合性、实用性的敏捷开发和极限编程方面的指南,是由敏捷开发的创始人之一所撰写的。1.讲述在预算和实践要求下,软件开发人员和项目经理如何使用敏捷开发完成项目;2.使用真实案例讲解如何用极限编程来设计、测试、重构和结对编程;3.包含了极具价值的可多次使用的C++和JAVA源代码;4.重点讲述了如何使用UML和设计模式解决面向客户系统的问题。
扫一扫,在手机上阅读
栏目最新博文
31,030 views
21,020 views
18,261 views
16,051 views
15,631 views
13,729 views
20,251 views
14,845 views
14,440 views
14,802 views
栏目博文推荐
6,393 views
4,938 views
4,634 views
10,057 views
6,147 views
10,820 views
3,272 views
9,026 views
3,568 views
4,651 views
多动脑筋,越动越聪明
关于网站与作者
互联网信息太多太杂,各互联网公司不断推送娱乐花边新闻,SNS,微博不断转移我们的注意力。但是,我们的时间和精力却是有限的。这里是互联网浩瀚的海洋中的一座宁静与美丽的小岛,供开发者歇息与静心潜心修炼(愿景)。
“Veda”的本义是知识、启示,希望这里能为开发者提供充足的技术资料。
我的电子邮件gonnsai(,腾讯微博:,欢迎与我联系。tp中全局变量不用global修饰就不能用么_百度知道
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。
tp中全局变量不用global修饰就不能用么
我有更好的答案
局变量的说明之前再加以static 就构成了静态的全局变量,在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。从以上分析可以看出,把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的,即只在定义该变量的源文件内有效。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。把全局变量改变为静态变量后是改变了它的作用域, 限制了它的使用范围。而静态全局变量则限制了其作用域。这两者在存储方式上并无不同
采纳率:82%
来自团队:
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包

我要回帖

更多关于 global 全局变量 的文章

 

随机推荐