在php中的作用

来源:互联网 发布:淘宝缴费平台 编辑:程序博客网 时间:2024/06/02 22:43

&在php中表示按“引用”传递,我自己理解成“绑定地址”。

用在变量身上,可以把一个变量与另一个变量的地址绑定在一起。

  $a="a";  // 变量默认拷贝值  $b=$a;  //&绑定后,改变$c,$a中任意一个变量的值,另一个也跟着变。  $c=&$a;  $a="aa";  echo 'a: '.$a."\n";  echo 'b: '.$b."\n";  echo 'c: '.$c."\n";  echo '-------------------'."\n";  $b="b";  echo '$b="b", $a: '.$a."\n";  $c="c";  echo '$c="c", a: '.$a."\n";

用在函数的形式参数身上,实际参数(变量)和形式参数也可以被绑定到一起。

  //实参传递进来时与形参地址绑定到一起了,改变形参d值,实参自动改变。  function foo(&$f){    $f="f";  }  $bar="bar";  foo($bar); //这里不能加&  echo '$bar: '.$bar."\n"; //$bar="f"

用在函数名前边,可以把变量和函数的返回值绑定到一起。

  // 绑定的是qux的返回值,也就是$q的地址。  function &qux()  {    //静态变量在程序离开它的作用域后,它的值能保存住。    static $q=0;    $q++;    return $q;  }  $u=100;  echo '$u=100, $u: '.$u."\n";  //此处没有绑定。  $u=qux();  echo '$u=qux(), $u: '.$u."\n";  $u=100;  echo '$u=100, $u: '.$u."\n";  $u=qux();  echo '$u=qux(), $u: '.$u."\n";  echo '-------------------'."\n";  //此时绑定了函数的返回值$q的值。  $u=&qux();  echo '$u=&qux(), $u: '.$u."\n";  //绑定后,改变$u的值,函数内的返回值$q也变成100.  $u=100;  echo '$u=100, $u: '.$u."\n";  //$q ++ 后变成101  $u=qux();  echo '$u=qux(), $u: '.$u."\n";

用在对象上可以一次销毁所有对象引用。

$a=new $A();$b=$a;$c=&$a;$a=null;

php5对象默认按引用传递,所以用和不用&,改变一个对象的值,其他引用都跟着变。
但是,用了&后,如果把其中一个对象赋值null,绑定地址的对象就都销毁了,如果不用null,销毁一个,其他引用不会跟着销毁。

  class A  {    public $aa;    function __construct()    {      $this->aa="aa";    }  }  $a=new A();  $b=$a;  $c=&$a;  echo $a->aa."\n";  echo $b->aa."\n";  echo $c->aa."\n";  $b->aa="hello";  //全都输出hello,证明用不用&都是按引用传递的。  echo $a->aa."\n";  echo $b->aa."\n";  echo $c->aa."\n";  $a=null; //或 $c=null;  效果是一样的。  //$a肯定不存在了。  echo $a->aa."\n";  //$b还能输出hello,证明不用&,销毁$a,不影响$b.  echo $b->aa."\n";  //$c也不存在了,说明使用&绑定的对象,销毁一个,另一个被销毁。  echo $c->aa."\n";

更多内容
http://www.cnblogs.com/xiaochaohuashengmi/archive/2011/09/10/2173092.html

0 0
原创粉丝点击