【学习笔记-php】php中的引用

php的引用(就是在变量或者函数前面加上&符号) //最重要就是 删除引用的变量 ,只是引用的变量访问不了,但是内容并没有销毁 在PHP 中引用的意思是:不同的名字访问同一个变量内容.

1. 变量引用
从下面的例子可以看出,使用‘&’对变量进行引用传递后,改变任何一个变量的值都会影响到访问这个变量内容的变量。

<?php
$a = 100;
$b = &$a;
echo $a;   //100
echo $b;   //100
$b = 200;
echo $a;   //200
echo $b;   //200
?>

2.函数的传址调用
函数的传址调用也是同样的道理,需要注意的是不能在引用中传递常量,如test(100)就会引起报错。

<?php
$a = 100;
function test(&$b){
    $b = $b*2;
    return $b;
}
$c = test($a);
echo $a;   //200
echo $c;   //200
?>

3.函数的引用返回

<?php  
function &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 = 5;  
$a = test(); // 这条语句会输出 $b的值 为6   
?>  

从上面的例子可以看出,当用$a = test()的方式调用函数得到并不是引用的返回,而$a的改变也不会影响到$b。
只用通过$a = &test()的方式调用函数才会得到引用的返回,此时改变$a会影响函数中的$b。

3.global引用
在函数内部声明为 global 的变量,其实是创建了一个引用。

<?php
$a = 100;
function test(){
    global $a;
    $a = 1;
    unset($a);
}
test();
echo $a;  //输出1

?>  

4.给引用再次赋予引用
先看个简单的例子。

<?php
$a = 'string';
$b = 1;
$aa = &$a;
$bb = &$b;
$bb = &$aa;
$bb = 2;

echo $a;   //输出2
echo $b;   //输出1 
?>    

从上面例子可以看到,如果给一个引用变量赋予一个新的引用,此时它会先断开和之前引用的映射,所以在这个例子中,$bb被再次赋值后,其实已经断开和$b的映射关系,建立了与$a的映射关系。

5.取消引用
使用unset可以取消$a的引用,但不会影响$b,如果需要取消所有的引用,可以用$a = null ,这时引用计数为0,就会触发zend的回收机制。

<?php
$a = 1;
$b = &$a;
unset($a);

echo $a;   //输出null
echo $b;   //输出1 
?>    

从上面例子可以看到,如果给一个引用变量赋予一个新的引用,此时它会先断开和之前引用的映射,所以在这个例子中,$bb被再次赋值后,其实已经断开和$b的映射关系,建立了与$a的映射关系。

5.对象引用
PHP中默认就是通过引用来调用对象, 但有时你可能想建立一个对象的副本,并希望原来的对象的改变不影响到副本 . 为了这样的目的,PHP提供了clone方法。

<?php
class Test{
    public $var;   
}
$a = new Test();
$a->var = 1;
$b = $a;
echo $b->var;  //输出1

$c = clone $a;
$c->var = null;
echo $a->var //输出1
?>    

关于对象的引用,还涉及到了深拷贝和浅拷贝。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值