你修改的是$this->var 但引用的是构造函数的临时变量$var
所以$x不变
$this->var['xx']=2; 再改成$var['xx'] = 2;

解决方案 »

  1.   


    不太明白你的意思。$this->var难道不是指外部变量$x的引用?因为构造中用的是(&$var)这个$var就是引用。而把这个引用给了类中的var
      

  2.   

    有什么问题吗?很正常啊,是引用地址了。class Test {
        protected $var = null;
        function __construct(&$var) {
            $var['z']=2;
            $this->var = &$var;
            $this->var['xx']=2;
        }
    }
     
     
    $x=array('b'=>2);
    $d=new Test($x);
    print_r($x);
    Array
    (
        [b] => 2
        [z] => 2
        [xx] => 2
    )
      

  3.   

    $x = array('b'=>2);
    $a =& $x; //$a 是 $x 的引用
    $a['a'] = 'a'; //所以对 $a 的改变会影响到 $x
    $b = $a; //$b 不是 $a 的引用
    $b['b'] = 'b'; //所以对 $b 的改变不会影响到 $a,更不会传递到 $x
    print_r($x);
      

  4.   

    http://www.cnblogs.com/thinksasa/p/3334492.html
    看看就明白了
      

  5.   

    $this->var = $var; 不是引用,$this->var修改不會影響$var
    $this->var = &$var; 是引用 ,$this->var修改會影響$var
      

  6.   


    我好像明白你的疑问在哪了
    如果$b引用了$a,你再用$b给$c赋值,如果不再次引用$b,$c得到的还是一个新建内存数据,想要使$c引用到$a,那么必须$c = &$b
      

  7.   


    我好像明白你的疑问在哪了
    如果$b引用了$a,你再用$b给$c赋值,如果不再次引用$b,$c得到的还是一个新建内存数据,想要使$c引用到$a,那么必须$c = &$b看了下手册,貌似php的&与c语言中的&根本不是一个概念。
      

  8.   

    php 的引用和 c语言 的指针当然不是一回事
    但你主贴中的代码的表现和等价c代码的表现是一样的