class Test { protected $var = null; function __construct(&$var) { $var['z']=2; $this->var = &$var; $this->var['xx']=2; }}$x=['b'=>2];$d=new Test($x);print_r($x);
你修改的是$this->var 但引用的是构造函数的临时变量$var
所以$x不变
$this->var['xx']=2; 再改成$var['xx'] = 2;
你修改的是$this->var 但引用的是构造函数的临时变量$var
所以$x不变
$this->var['xx']=2; 再改成$var['xx'] = 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);
$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);
http://www.cnblogs.com/thinksasa/p/3334492.html
看看就明白了
$this->var = $var; 不是引用,$this->var修改不?影?$var
$this->var = &$var; 是引用 ,$this->var修改?影?$var
不太明白你的意思。$this->var难道不是指外部变量$x的引用?因为构造中用的是(&$var)这个$var就是引用。而把这个引用给了类中的var
不太明白你的意思。$this->var难道不是指外部变量$x的引用?因为构造中用的是(&$var)这个$var就是引用。而把这个引用给了类中的var
php 的引用和 c语言 的指针当然不是一回事
但你主贴中的代码的表现和等价c代码的表现是一样的