<?php
$a = 1;
$b = 2;function Sum()
{
global $a, $b; $b = $a + $b;
}Sum();
echo $b;
?>
以上脚本的输出将是 "3"。在函数中申明了全局变量 $a 和 $b,任何变量的所有引用变量都会指向到全局变量。对于一个函数能够申明的全局变量的最大个数,PHP 没有限制。 这些都是在php5中文手册中的最后输出的应该是2吧,是手册写错了吗?
$a = 1;
$b = 2;function Sum()
{
global $a, $b; $b = $a + $b;
}Sum();
echo $b;
?>
以上脚本的输出将是 "3"。在函数中申明了全局变量 $a 和 $b,任何变量的所有引用变量都会指向到全局变量。对于一个函数能够申明的全局变量的最大个数,PHP 没有限制。 这些都是在php5中文手册中的最后输出的应该是2吧,是手册写错了吗?
<?php
function test_global() {
global $var1, $var2;
$var2 =& $var1;
}
$var1=5;
$var2 = $var3 = 0;
test_global();
print $var2 ."\n";
上面的输出呢?不是5,而是0
中的 $var1 和 $var2 是对全局变量的引用,即
$var1 =& $GLOBALS['var1']
$var2 =& $GLOBALS['var2']
也就是说,函数中的 $var1 和 $var2 与函数外的 $var1 和 $var2 并不是一回事
函数中的 $var1 和 $var2 只有值,而无载体
既然是无载体,也就无法“引用”了
输出的 0,就表示了这一点
global $var1, $var2;
$var2 =& $var1;
}global $var1, $var2; 变量 | 内存地址 | 值fn_$var1 | Ox001 | NULL
fn_$var2 | Ox002 | NULL
$var2 =& $var1;变量 | 内存地址 | 值fn_$var1 | Ox001 | NULL
fn_$var2 | Ox001 | NULL$var1=5;
$var2 = $var3 = 0;
变量 | 内存地址 | 值$var1 | Ox001 | 5
$var2 | Ox002 | 0
$var3 | Ox003 | 0
执行 test_global() 时global $var1, $var2; 变量 | 内存地址 | 值fn_$var1 | Ox001 | 5
fn_$var2 | Ox002 | 0
$var2 =& $var1;变量 | 内存地址 | 值fn_$var1 | Ox001 | 5
fn_$var2 | Ox001 | 5
再次执行 echo $var2变量 | 内存地址 | 值$var2 | Ox002 | 0【结论】function test_global()中 echo $var2 为 5函数外面 echo $var2 为 0