PHP引用变量

概念

在PHP中引用意味着用不同的名字访问同一个变量内容

定义方式

使用 & 符号

举例说明---传值赋值

<?php
//定义变量
$a = range(0, 100);
var_dump(memory_get_usage());    //int(399112) 
xdebug_debug_zval('a');          //a:(refcount=1, is_ref=0)  //recount表示变量指向的内存地址引用个数  is_ref表示是不是引用
//定义另一个变量,将a变量赋值给A
//COW机制
$A = $a;                         
var_dump(memory_get_usage());  //int(399112)
xdebug_debug_zval('a');        //(refcount=2, is_ref=0)
xdebug_debug_zval('A');        //(refcount=2, is_ref=0)
//对a变量重新赋值
$a = range(0, 100);              
var_dump(memory_get_usage());  //int(407360)
xdebug_debug_zval('a');        //(refcount=1, is_ref=0)
xdebug_debug_zval('A');        //(refcount=1, is_ref=0)

举例说明---引用赋值

<?php
//定义变量
$a = range(0, 100);
var_dump(memory_get_usage());    //int(399112)
xdebug_debug_zval('a');          //a:(refcount=1, is_ref=0)
//定义另一个变量,将a变量赋值给A
//COW机制
$A = &$a;
var_dump(memory_get_usage());    //int(399136)
xdebug_debug_zval('a');  		//(refcount=2, is_ref=1)
xdebug_debug_zval('A');  		//(refcount=2, is_ref=1)
//对a变量重新赋值
$a = range(0, 100);
var_dump(memory_get_usage());    //int(399136)
xdebug_debug_zval('a');  		//(refcount=2, is_ref=1)
xdebug_debug_zval('A');  		//(refcount=2, is_ref=1)

当变量引用时,unset只会取消引用,不会销毁内存空间

<?php
$a = 1;
$A = &$a;
unset($A);
echo $a;   //1

类本身就是引用传值

<?php
//写出如下程序的输出结果
$d = ['a', 'b', 'c'];

foreach ($d as $k => $v) {
    $v = &$d[$k];
    /*
     array(3) {
            [0]=>
      &string(1) "a"
            [1]=>
      string(1) "b"
            [2]=>
      string(1) "c"
    }
    array(3) {
            [0]=>
      string(1) "b"
            [1]=>
      &string(1) "b"
            [2]=>
      string(1) "c"
    }
    array(3) {
            [0]=>
      string(1) "b"
            [1]=>
      string(1) "c"
            [2]=>
      &string(1) "c"
    }
    */
}

/*
 array(3) {
    [0]=>
  string(1) "b"
    [1]=>
  string(1) "c"
    [2]=>
  &string(1) "c"
}
*/

//程序运行时,每一次循环结束后变量 $d 的值是什么?请解释。
//程序执行完成后,变量 $d 的值是什么?请解释。

/*
step1 : $k = 1,$d = ['a', 'b', 'c'],$v=a, $v=$d[1];
step2 : $k = 2,$d = ['b', 'b', 'c'],$v=b, $v=$d[2];
step2 : $k = 3,$d = ['b', 'c', 'c'],$v=c, $v=$d[3];
*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值