Maison  >  Article  >  développement back-end  >  请问谁能给个解释?关于引用“&”

请问谁能给个解释?关于引用“&”

WBOY
WBOYoriginal
2016-06-23 13:50:00950parcourir

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代码的表现是一样的

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn