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變成$this->var = $var;
則xx=2這句不生效。$var不是已經是引用了嗎?
回複討論(解決方案)
你修改的是$this->var 但引用的是建構函式的臨時變數$var
所以$x不變
$this->var['xx']=2; 再改成$var['xx'] = 2;
你修改的是$this->var 但引用的是建構函式的臨時變數$var
所以$x不變
$this->var['xx']=2; 再改成$var['xx'] = 2;
不太明白你的意思。$this->var難道不是指外部變數$x的引用?因為構造中用的是(&$var)這個$var就是引用。而把這個引用給了類中的var
有什麼問題嗎?很正常啊,是引用地址了。
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
)
$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
我好像明白你的疑問在哪了
如果$b引用了$a,你再用$b給$c賦值,如果不再次引用$b,$c得到的還是一個建立記憶體資料,想要使$c引用到$a,那麼必須$c = &$b
不太明白你的意思。$this->var難道不是指外部變數$x的引用?因為構造中用的是(&$var)這個$var就是引用。而把這個引用給了類中的var
我好像明白你的疑問在哪了
如果$b引用了$a,你再用$b給$c賦值,如果不再次引用$b,$c得到的還是一個建立記憶體資料,想要使$c引用到$a,那麼必須$c = &$b
看了下手冊,貌似php的&與c語言中的&根本不是一個概念。
php 的引用和 c語言 的指標當然不是一回事
但你主貼中的代碼的表現和等價c代碼的表現是一樣的