指的的是PHP当前页面的全局变量$key = value的引用,此值可以在PHP流程的任意地方改变,改变的是该全局变量,真正的全局引用。
golbal $key = value;一般用在函数内部,意思是申明变量$key,该变量是由全局变量$key复制而来(继承了全局变量$key),复制的变量只在函数内部有效。一旦在函数中global了某个外部变量后,这个变量就可以在这个函数中使用了
$GLOBALS:
b();
function b(){
a();
echo $a;//$a未定义
var_dump($GLOBALS);// 999
$GLOBALS['key'] = 888;
}
function a(){
$GLOBALS['key'] = 999;
$a = 4;
}
var_dump($GLOBALS);// 888
echo $a;//$a未定义
结果:
golbal:
$a = 'php';
function c(){
global $ac;
echo $ac,'--';
global $a;//从这个例子看出global了一个变量就等于传递了一个引用进来,其实就是就是外部变量的同名引用
echo $a;
}
c();
结果:
function d(){
$d = 23;//没有global进行修饰,函数外部不能调用否则会报错
}
d();
echo $d;
结果:
function d(){
global $d;//这样的声明使得$d变成全局变量,函数外部可以调用了$d
$d = 23;
}
d();
echo $d;
结果:
$e = 'PHP';
function e(){
global $e;//就是外部变量的同名引用,变量本身的作用范围仍然在函数体内。
$e = 'JavaScript';//改变这些变量的值,外部的同名变量自然也改变。
}
e();
echo $e;
结果:
$f1 = 1;
$f2 = 2;
function f()
{
global $f1,$f2;
$f1 = $f2;//但一旦用了&,那么变量将不再是同名引用。此时函数内的变量的变化对函数外部的变量并无影响
}
f();
echo $f1;
结果:
$g1 = 1;
$g2 = 2;
function g()
{
global $g1,$g2;
$g1 = &$g2;//但一旦用了&,那么变量将不再是同名引用。此时函数内的变量的变化对函数外部的变量并无影响
}
g();
echo $g1;
结果:
$h1 = 1;
$h2 = 2;
function h()
{
global $h1,$h2;
$h1=&$h2;
$h1=7;
}
h();
echo $h1,'-';//因为内部应用了&,就不是同名引用了,所以尽管$h1被赋值7,但外面的$h1还是原来的1
echo $h2;//因为在函数内的$h1与$h2具有相同的引用。因此改变了$h1的值,$h2的值也做了改变。
结果: