<?php
$a = 1;
$b = 2;function Sum()
{
    global $a, $b;    $b = $a + $b;
}Sum();
echo $b;
?>  
 
以上脚本的输出将是 "3"。在函数中申明了全局变量 $a 和 $b,任何变量的所有引用变量都会指向到全局变量。对于一个函数能够申明的全局变量的最大个数,PHP 没有限制。 这些都是在php5中文手册中的最后输出的应该是2吧,是手册写错了吗?

解决方案 »

  1.   

    这不是很显然的3吗,既然global了,那么用的就是外面的变量了,外面的变量改变了,你echo怎么会是2呢
      

  2.   

    恩,大概明白了是什么意思了。如下
    <?php
    function test_global() {
     global $var1, $var2;
     $var2 =& $var1;
     }
     $var1=5;
    $var2 = $var3 = 0;
     test_global();
     print $var2 ."\n";
     
    上面的输出呢?不是5,而是0
      

  3.   

    & 引用,请注意看手册中的关于引用的说明首先 global $var1, $var2;
    中的 $var1 和 $var2 是对全局变量的引用,即
    $var1 =& $GLOBALS['var1']
    $var2 =& $GLOBALS['var2']
    也就是说,函数中的 $var1 和 $var2 与函数外的 $var1 和 $var2 并不是一回事
    函数中的 $var1 和 $var2 只有值,而无载体
    既然是无载体,也就无法“引用”了
    输出的 0,就表示了这一点
      

  4.   

    +------------------------ 以下是自己的理解 ----------------------------------function test_global() {
     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