1.global
Global的作用是定义全局变量,但是这个全局变量不是应用于整个网站,而是应用于当前页面,包括include或require的所有文件。
但是在函数体内定义的global变量,函数体内可以使用,在函数体外定义的global变量不能在函数体内使用,具体看下面示例。
<?php
$name = "why";
function changeName(){
$name = "what";
}
changeName();
echo "my name is " . $name . "<br/>"; //my name is why
?>
<?php
global $name;
$name = "why";
function changeName(){
$name = "what";
}
changeName();
echo "my name is " . $name . "<br/>"; //my name is why
?>
原来,global的正确用法是:"在一个函数中引入外部的一个变量,如果该变量没有通过参数传递进来,那么就通过global引入进来。" 也就是说,当一个函数引用一个外部变量时,可以在函数内通过global来声明该变量,这样该变量就可以在函数中使用了(相当于当作参数引用进来)。
<?php
$name = "why";
function changeName(){
global $name;
$name = "what";
}
changeName();
echo "my name is " . $name . "<br/>"; //my name is what
?> //说明global是起传递参数的作用,而并非使变量的作用域为全局
<?php
$name = "why";
function changeName(){
global $name;
$name = "what";
}
function changeName2(){
$name = "where";
}
changeName();
changeName2();
echo "my name is " . $name . "<br/>";
?>
//执行结果为:my name is what,如果在changeName2()中添加global $name,运行结果则是:my name is where。
2.$GLOBALS
在 $GLOBALS
数组中,每一个变量为一个元素,键名对应变量名,值对应变量的内容。$GLOBALS
之所以在全局范围内存在,是因为 $GLOBALS
是一个超全局变量。注意$GLOBALS
的写法,比如变量$a1
,写法为$GLOBALS['a1']
。
示例:先使用global定义
使用$GLOBALS定义全局变量
<?php
$name = "why";
function changeName(){
$GLOBALS['name'] = "what";
}
changeName();
echo "my name is " . $name . "<br/>"; //my name is what。
?>
例1:
function test()
{
global $a;//定义全局变量a
unset($a); //删除变量a
//print $a;//会报错,因为unset已经把$a删除了。
}
$a = 2; //定义一个变量a
test(); //调用test()方法
print $a; //输出a,输出的其实是$a = 2,所以结果为2.
例2:
<?php
$var1 = 1;
$var2 = 2;
function test1(){
$GLOBALS['var2'] = &$GLOBALS['var1'];
}
test1();
echo $var2 . "<br />"; //1
$var3 = 1;
$var4 = 2;
function test2(){
global $var3,$var4;
$var4 = &$var3;
}
test2();
echo $var4 . "<br />"; //2
?>
//输出$var2的值为1,$var4的值为2,因为$var3的引用指向了$var4的引用地址。$var4的实际值并没有改变。官方的解释是:$GLOBALS['var']是外部的全局变量本身,global $var是外部$var的同名引用或者指针。意味着$GLOBAL在一个脚本的全部作用域中都可用,在函数或方法中无需执行global $variable; 就可以访问它们。与所有其他超全局变量不同,$GLOBALS在PHP中总是可用的
<?php
$var1 = 1;
function test1(){
unset($GLOBALS['var1']);
}
test1();
echo $var1 . "<br />";
$var2 = 1;
function test2(){
global $var2;
unset($var2);
}
test2();
echo $var2;
?>
//输出结果是$var1不存在,而$var2的值为1。这就证明,$var2只是别名引用,本身的值没有受到任何的改变。也就是说global $var其实就是$var = &$GLOBALS['var'],调用外部变量的一个别名而已!
网友评论