Home > Article > Backend Development > php引用(&)
##### php引用php引用允许两个变量指向同一个内容```<?php$a = &$b;//$a和$b指向了同一个变量?>```如果对一个未定义的变量进行引用赋值,引用穿参,则会自动创建该变量```function foo(&$var){}foo($a);var_dump($a);//输出null $b = array();foo($b['b']);var_dump(array_key_exists('b',$b));//bool true$c = new stdClass();foo($c->d);var_dump(property_exists($c,'d'));//bool true```如果在一个函数内部给一个声明为global变量赋予一个引用,该引用只在函数内部可见,可以通过使用$GLOBALS数组避免```$var1 = "example variable";$var2 = "";function global_references($use_globals){ global $var1,$var2; if(!$use_globals){ $var2 =& $var1; }else{ $GLOBALS["var2"] =& $var1; }}global_references(false);echo "var2 is set to $var2"."</br>";//"var2 is set to "global_references(true);echo "var2 is set to $var2"."</br>";//"var2 is set to example variable"```取消引用当`unset`一个引用,只是断开了变量名和变量内容之间的绑定,并不代表变量的内容被销毁了```<?php$a = 1;$b =& $a;unset($a);?>```函数的引用传递```function test(&$a){$a = $a +100;}$b = 1;echo $b; //输出1test($b);//这里$b传递给函数的其实是$b变量内容所处的内存地址,通过函数里改变$a的值就可以改变$b的值了echo $b;```函数的引用返回```<?phpfunction &test(){ static $b=0;//申明一个静态变量 $b=$b+1; echo $b; return $b;}$a=test();//这条语句会输出 $b的值 为1$a=5;$a=test();//这条语句会输出 $b的值 为2$a=&test();//这条语句会输出 $b的值 为3//此处a得到的是B的地址//将A置换为5之后相应的b也会变为A的值$a=5;$a=test();//这条语句会输出 $b的值 为6?>```引用结构出现在面向对象中```class fucker{ private $data = 'hi'; public function &get(){ return $this->data; } public function out(){ echo $this->data; }}$q = new fucker();$d = & $q->get();$q->out();$d = 'fuck';$q->out();$d = 'u';$q->out();$d = 'sir';$q->out();//hifuckusir```