global和$GLOBALS区别
2015-07-15 23:10
288 查看
1:Global的作用是定义全局变量,但是这个全局变量不是应用于整个网站,而是应用于当前页面,包括include或require的所有文件。
比如 : 我们在函数体外定义了一个变量 ,想要在函数体内也取到
注意::在函数体内定义的global变量,函数体外可以使用, 但在函数体外定义的global变量不能在函数体内使用,
$GLOBALS — 引用全局作用域中可用的全部变量。
一个包含了全部变量的全局组合数组。变量的名字就是数组的键。
即出现过的全局变量,就可以通过$GLOBALS这个数组取得。
PHP生命周期中,定义在函数体外部的所谓全局变量,函数内部是不能直接获得的。
$foo = "Example content";
test();
function test() {
$foo = "local variable";
echo '$foo in current scope: ' . $foo . "<br>";
echo '$foo in global scope: ' . $GLOBALS["foo"] . "<br>";
}
//会输出 $foo in current scope: local variable
// $foo in global scope: Example content
要访问外部的$foo必须使用 $GLOBALS数组。对于通过include文件进来的外部全局变量也适用。
在 $GLOBALS 数组中,每一个变量为一个元素,键名对应变量名,值对应变量的内容。$GLOBALS 之所以在全局范围内存在,是因为 $GLOBALS 是一个超全局变量。
php中global也有这样的功能,它和$GLOBALS的区别在于:
global在函数产生一个指向函数外部变量的别名变量,而不是真正的函数外部变量。
$GLOBALS[] 确确实实调用是外部的变量,函数内外会始终保持一致。
对于类中的成员变量,类中函数必须使用$this->的方式访问,不能用$GLOBALS方式:
global的作用是定义全局变量,但是这个全局变量不是应用于整个网站,而是应用于当前页面,包括include或require的所有文件。
function t1() {
global $var1, $var2;
$var2 = &$var1;
}
function t2() {
$GLOBALS['var3'] = &$GLOBALS['var1'];
}
$var1 = 5;
$var2 = $var3 = 0;
t1();
print $var2 ."\n"; 输出 0
t2();
print $var3 ."\n"; 输出 5
再看个例子
function t1() {
global $var1;
$var1 = 2;
unset($var1);
}
function t2() {
$GLOBALS['var1'] = 3;
unset($GLOBALS['var1']);
}
$var1 = 1;
t1();
print $var1 . "\n"; 输出 2
t2();
print $var1 . "\n"; 输出 空
1、$GLOBALS是由所有已定义全局变量自动形成的数组。变量名就是该数组的索引。即$GLOBALS['var1']与函数外部的变量$var1是同一个变量,所以将$GLOBALS['var1'] 删除后,该变量已不存在,所有无法输出了。
注:$GLOBALS是自动全局变量。这意味着它在所有的脚本中都有效。在函数或方法中不需要使用 global $GLOBALS; 来访问它。
2、"global $var1;"是产生了函数外部$var1的别名变量"$var1",它不是真正的函数外部变量,他只存在于函数的内部,所以即使在函数内将别名变量删除也不会影响外面的变量,但是可以修改函数外部变量的值。
function test_global() {
global $var1;
$var1 = 'ok';
unset($var1);
}
test_global();
$var2 = &$var1;
unset($var1);
echo $var2; //输出 ok
从结果可以看出,unset只是断开变量名与变量值连接,并没有马上销毁变量的值,而且在函数内部定义的全局变量,实际在外部只是使用了函数内部的别名而已,所以我们在外面依然可以访问$var1。
比如 : 我们在函数体外定义了一个变量 ,想要在函数体内也取到
$a = 1; function test(){ global $a; echo $a; } test(); //输出 1
注意::在函数体内定义的global变量,函数体外可以使用, 但在函数体外定义的global变量不能在函数体内使用,
global $a; $a=1; functoin test(){ echo $a; } test(); //空的 说明没有获取到 ================================ $a=1; function test(){ global $a; $a=2; } test(); echo $a; //输出2
$GLOBALS — 引用全局作用域中可用的全部变量。
一个包含了全部变量的全局组合数组。变量的名字就是数组的键。
即出现过的全局变量,就可以通过$GLOBALS这个数组取得。
PHP生命周期中,定义在函数体外部的所谓全局变量,函数内部是不能直接获得的。
$foo = "Example content";
test();
function test() {
$foo = "local variable";
echo '$foo in current scope: ' . $foo . "<br>";
echo '$foo in global scope: ' . $GLOBALS["foo"] . "<br>";
}
//会输出 $foo in current scope: local variable
// $foo in global scope: Example content
要访问外部的$foo必须使用 $GLOBALS数组。对于通过include文件进来的外部全局变量也适用。
在 $GLOBALS 数组中,每一个变量为一个元素,键名对应变量名,值对应变量的内容。$GLOBALS 之所以在全局范围内存在,是因为 $GLOBALS 是一个超全局变量。
$a = 1; function a() { echo $GLOBALS['a']; } a();// 输出 1 function test() { $GLOBALS['a'] =8; } test(); echo $a; //会输出 8
php中global也有这样的功能,它和$GLOBALS的区别在于:
global在函数产生一个指向函数外部变量的别名变量,而不是真正的函数外部变量。
$GLOBALS[] 确确实实调用是外部的变量,函数内外会始终保持一致。
对于类中的成员变量,类中函数必须使用$this->的方式访问,不能用$GLOBALS方式:
global的作用是定义全局变量,但是这个全局变量不是应用于整个网站,而是应用于当前页面,包括include或require的所有文件。
function t1() {
global $var1, $var2;
$var2 = &$var1;
}
function t2() {
$GLOBALS['var3'] = &$GLOBALS['var1'];
}
$var1 = 5;
$var2 = $var3 = 0;
t1();
print $var2 ."\n"; 输出 0
t2();
print $var3 ."\n"; 输出 5
再看个例子
function t1() {
global $var1;
$var1 = 2;
unset($var1);
}
function t2() {
$GLOBALS['var1'] = 3;
unset($GLOBALS['var1']);
}
$var1 = 1;
t1();
print $var1 . "\n"; 输出 2
t2();
print $var1 . "\n"; 输出 空
1、$GLOBALS是由所有已定义全局变量自动形成的数组。变量名就是该数组的索引。即$GLOBALS['var1']与函数外部的变量$var1是同一个变量,所以将$GLOBALS['var1'] 删除后,该变量已不存在,所有无法输出了。
注:$GLOBALS是自动全局变量。这意味着它在所有的脚本中都有效。在函数或方法中不需要使用 global $GLOBALS; 来访问它。
2、"global $var1;"是产生了函数外部$var1的别名变量"$var1",它不是真正的函数外部变量,他只存在于函数的内部,所以即使在函数内将别名变量删除也不会影响外面的变量,但是可以修改函数外部变量的值。
function test_global() {
global $var1;
$var1 = 'ok';
unset($var1);
}
test_global();
$var2 = &$var1;
unset($var1);
echo $var2; //输出 ok
从结果可以看出,unset只是断开变量名与变量值连接,并没有马上销毁变量的值,而且在函数内部定义的全局变量,实际在外部只是使用了函数内部的别名而已,所以我们在外面依然可以访问$var1。
相关文章推荐
- struts (三)
- HttpServletRequest对象(一)
- PHP利用P3P实现跨域
- C语言--程序设计基础--6章
- Spark应用如何访问带Kerberos认证的CDH Hadoop集群
- C++获取当前系统时间
- 15-07-08 数组-- 去掉最低分去掉最高分取平均分
- jni 简单实践 eclipse支持c++11
- Android Day01-Android按钮点击事件的4种写法
- 进程与线程之间的区别和联系
- hdu 3443(水题,公式)Shift Number
- Java HttpClient使用
- RequireJS学习资料汇总
- Django 模板中引用静态资源(js,css等)
- 页面上动态编译及执行java代码
- 用P3P header解决iframe跨域访问cookie
- 将string转换成char型的一般方法
- python 多线程两种实现方式
- 2015071502 - 东北
- Windows Azure 保留已存在的虚拟网络外网IP(云服务)