php-引用变量的定义和原理

本文探讨了PHP中变量引用的机制,包括Copy-On-Write特性如何影响变量更新,以及引用传递如何改变这一行为。通过具体示例展示了数组元素引用的变化过程,并分析了对象引用的特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<?php
//php引用变量:不同变量名指向同一地址。
//定义一个变量a,此时内存开辟了一块区域,$a指向该区域。
$a = 100;
var_dump($a);    //int 100
//定义变量b,将a变量的值赋值给b,此时该区域有两个变量($a和$b)指向。
$b = $a;
var_dump($b);    //int 100
//修改$a变量的值,php变量具有Copy On Write的特性,所以会复制并重写a所指向的区域值,此时a和b分别指向不同区域。
$a = 10;
var_dump($a);    //int 10
var_dump($b);    //int 100


//------------------------------------------------------------------


$c = 100;
$d = &$c;
$c = 10;
var_dump($c);    //int 10
var_dump($d);    //int 10
//当引用指向时,php变量不在具有COW特性,且指向同一内存区域。


//* unset()只能消除变量的引用,不能删除其内存分配的空间


//------------------------------------------------------------------


/*
例题:
    写出如下程序的输出结果:
    <?php
    $data = ['a','b','c'];
    foreach($data as $key=>$val){
        $val = &$data[$key];
    }
    问:最终$data的值是多少?
 */
    $data = ['a','b','c'];
    foreach($data as $key=>$val){
        $val = &$data[$key];
        print_r($data);
    }


/*
    1.$key = 0,
      $val = 'a',
      $val = &$d[0] =>'a'
      $data = ['a','b','c'];


    2.$key = 1,
      $val = 'b', =>$d[0]
      $val = &$d[1] =>'b'
      $data = ['b','b','c'];


    1.$key = 2,
      $val = 'c', =>$d[1]
      $val = &$d[2]=>'c'
      $data = ['b','c','c'];

 */


// 对象本身就是引用传递,不具有cow特性
class Person
{
    public $name = "zhangsan";
}


$p1 = new Person;
xdebug_debug_zval('p1');


$p2 = $p1;
xdebug_debug_zval('p1');


$p2->name = "lisi";
xdebug_debug_zval('p1');

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值