在php中的作用

&在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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值