php的引用符号&用法
<?php $a = 'CC' ; $b = $a ; //$a和$b指向同一内存地址 $a = 'DD' ; echo $b ; /* php中对于地址的指向(类似指针)功能不是由用户自己来实现的, 是由Zend核心实现的,php中引用采用的是[写时拷贝]的原理, 就是除非发生写操作,指向同一个地址的变量或者对象是不会被拷贝的。 当$a='DD'; 由于$a与$b所指向的内存的数据要重新写一次了,此时Zend核心会自动判断 自动为$b生产一个$a的数据拷贝,重新申请一块内存进行存储。 * */ echo '<hr>' ; $c = 'ABC' ; $d =& $c ; //$b指向$a的内存地址,传地址赋值 $d = 'E' ; echo $c ; /** CC -------------------------------------------------------------------------------- E * */ ?> <?php //函数的引用返回 function &test() { static $b =0; //申明一个静态变量 $b = $b +1; echo '$b=' . $b ; echo '<br>' ; return $b ; } $a =test(); echo '$a=' . $a ; //这里不是函数的引用返回,跟普通的函数调用没有区别 $a =&test(); //这种方式才是函数的引用返回。 //至于什么是引用返回呢(PHP手册上说:引用返回用在当想用函数找到引用应该被绑定在哪一个变量上面时。) //用在这里意思就是test()被绑定在$a上了。 echo '$a=' . $a ; $a =6; test(); //这条语句会输出$b的值 为7 echo '$a=' . $a ; /* $b=1 $a=1$b=2 $a=2$b=7 $a=7 * */ ?> <?php //引用传递 function printArray(& $arr ){ //echo count($arr); array_pop ( $arr ); echo count ( $arr ); } //值传递 function printArray2( $arr ){ //echo count($arr); array_pop ( $arr ); echo count ( $arr ); } $a = array (1,2,3); $b = $a ; //$b=&$a; printArray( $a ); print_r( $b ); print_r( $a ); echo '<hr>' ; printArray( $a ); print_r( $b ); print_r( $a ); /** 2Array ( [0] => 1 [1] => 2 [2] => 3 ) Array ( [0] => 1 [1] => 2 ) -------------------------------------------------------------------------------- 1Array ( [0] => 1 [1] => 2 [2] => 3 ) Array ( [0] => 1 ) * */ ?> <?php //对象的引用 class a{ var $name = "ABC" ; } $b = new a; $c = $b ; echo '$b->name=' . $b ->name; //这里输出ABC echo '<br>' ; echo '$c->name=' . $c ->name; //这里输出ABC echo '<br>' ; $b ->name= "DEF" ; echo '$b->name=' . $b ->name; echo '<br>' ; echo '$c->name=' . $c ->name; echo '<hr>' ; /* 在PHP5中 对象的复制 是通过引用来实现的。 上列中$b=new a; $c=$b; 其实等效于$b=new a; $c=&$b; PHP5中默认就是通过引用来调用对象, 但有时你可能想建立一个对象的副本, 并希望原来的对象的改变不影响到副本 . 为了这样的目的,PHP定义了一个特殊的方法,称为__clone. * */ $x = new a; $y =clone $x ; $x ->name= 'XXX' ; echo '$x->name=' . $x ->name; echo '<br>' ; echo '$y->name=' . $y ->name; /* $b->name=ABC $c->name=ABC $b->name=DEF $c->name=DEF -------------------------------------------------------------------------------- $x->name=XXX $y->name=ABC * */ ?>查看更多关于php的引用符号&用法 - php面向对象的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did29657