/** * 是变量的情况; */ //& 符号引用,表示:使用了&,引用地址,表示两个变量指向了同一个内容,当改变$b时,内存中的内容被改变,$a的值被改变; $a = 23; $b = $a; $b=44; echo $a; //$a = 23;
$c = &$a; $c = 22; echo $a; //$a = 22; /** * 是函数的情况 */ #2.1 函数的传值调用; //通常情况下函数内是一个封闭的环境,函数内部是一个独立的环境,在某些特定场合下,需要函数的返回值被外部引用 //这个时候可以考虑使用& 符号; function test_(&$a){ $a = $a + 100; echo $a; } $a = 22; test_($a); $a = $a +22; echo "<pre>"; echo $a; //打印144; //2.2 函数的引用返回:表示将函数内部return返回的值的内存地址和被绑定的变量的内存地址都指向同一个位置; function &demo(){ static $c = 0; $c = $c + 1; echo $c; return $c; } echo "<hr>"; demo(); //1; demo(); //2; $a = &demo(); //返回3,表示$a = 3,此时demo函数内部的$b和$a 的内存地址指向同一位置; $a = 5; //$b = 5; demo(); //$b= 6 echo "<hr>"; /** * 对象的引用; */ class a { var $abc = "ABC"; } $b = new a; $c = $b; echo $b->abc; //这里输出ABC echo $c->abc; //这里输出ABC $b->abc = "DEF"; echo $c->abc; //这里输出DEF //说明:对象的赋值过程其实是引用赋值,$b 和$c 都是指向同一个内存地址,PHP5中默认就是通过引用来调用对象,但是如果我们需要 //需要连个相同的对象,但指向不同的内存地址,可以使用__clone(),这个魔术方法; //引用的作用 //如果程序比较大,引用同一个对象的变量比较多,并且希望用完该对象后手工清除它,个人建议用 "&" 方式,然后用$var=null的方式清除. // 其它时候还是用php5的默认方式吧. 另外, php5中对于大数组的传递,建议用 "&" 方式, 毕竟节省内存空间使用。 //取消引用 //当你 unset 一个引用,只是断开了变量名和变量内容之间的绑定。这并不意味着变量内容被销毁了。例如: echo "<hr>"; $a = 1; $b = &$a; unset($b); echo $a; //此时$a 还在 为1;
php中引用符号(&)的使用详细介绍
最新推荐文章于 2024-07-25 20:29:32 发布