加入收藏 | 设为首页 | 会员中心 | 我要投稿 安阳站长网 (https://www.0372zz.cn/)- 高性能计算、分布式云、混合云存储、云计算、视频终端!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

详解PHP变量传值赋值和引用赋值变量销毁

发布时间:2022-07-14 11:24:00 所属栏目:PHP教程 来源:互联网
导读:这篇文章主要介绍了PHP变量传值赋值和引用赋值变量销毁,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。 本文实例为大家分享了PHP变量传值赋值和引用赋值变量销毁的具体代码,供
  这篇文章主要介绍了PHP变量传值赋值和引用赋值变量销毁,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
 
  本文实例为大家分享了PHP变量传值赋值和引用赋值变量销毁的具体代码,供大家参考,具体内容如下
 
  <?php
     $a = 100;
     $b = 200;
     var_dump($a,$b); //int(100) int(200)
   ?>
  php中,上面的代码,变量是怎么存放的呢?
 
  上面的代码变动下,将变量b赋值给变量a,会发生什么?
 
  <?php
    $a = 100;
    $b = 200;
    $a = $b;/*多了这个*/
    var_dump($a,$b); //int(200) int(200)
  ?>
  问题来了,$a = $b,那么是将变量a的指针指向了变量b指针所指向的位置?还是变量a指向的位置的值变了?
 
  引用赋值和上面传值赋值不同,引用赋值是两个变量指向一个地方,一旦这样,一改俱改。
 
  怎么引用赋值呢?变量名前加&即可,
 
  $a = &$b;
 
  这样赋予变量a的就不仅仅是变量b的值,而是变量b的地址,变量a和变量b共同指向一个地址。
 
  <?php
    $a = 100;
    $b = 200;
    $a = &$b;
    var_dump($a,$b); //int(200) int(200)
    /*变量b引用赋值给变量a后,ab指向同一个地址,将会一改俱改,如下:*/
    $a =500;  
    var_dump($a,$b);//int(500) int(500) 一改俱改
    $b = 700;
    var_dump($a,$b);//int(700) int(700)  一改俱改
  ?>
  理解下面的话
 
  $a = 100;
 
  变量a赋值int 100 ,100是基础数据类型,不是变量,是存在变量指向位置的
 
  $a = $b;
 
  变量b的值 赋值 给变量a,变量a,b各有各的指向,执行之后,各是各的。
 
  $a = &$b;
 
  变量b的值的地址 赋值给变量 a ,变量a,b共用一个地址哦!一改俱改!
 
  php中unset()是用来销毁变量的,但很多时候,unset()只把变量给销毁了,内存中存放的该变量的值仍然没有销毁,也就是没能达到我们想要的释放内存的效果。
 
  这里可以用 变量=null 的方法来释放其内存
 
  unset也会释放内存的情况
 
  1. 在变量值所占空间超过255字节长的时候,unset(变量)才会释放内存
 
  2. 只有当指向该值的所有变量都被销毁后,地址才会被释放(比如$a,$b都指向该值,仅仅unset($a);是不释放的,$b还是正常存在的)(也要执行1的判断)
 
  $a = 200;
  $b = &$a;
  unset($a);
  var_dump($a,$b); //NULL int(100)
  上面的代码,执行到unset($a)时候,就是将变量a的指向断开,同时将变量a扔出花名册,从下图可以看出,对变量b是没有影响的。
 
  但是,如果用$a = null;这种方式销毁变量时,将会有如下影响:
 
  <?php
    $a = 100;
    $b = &$a;
    $a = null;
    var_dump($a,$b); //NULL NULL
  ?>
  这种方式,释放了内存,但是共用一个地址的另一个变量也受到了影响。
 
  看看这两种方式在数组上的应用:
 
  <?php
    $aaa = array(
      'a'=>1,
      'b'=>2
    );
    unset($aaa['a']);
    print_r($aaa); //Array ( [b] => 2 ) ,用unset,数组中这一项不存在了
   
    $bbb = array(
      'a'=>1,
      'b'=>2
    );
    $bbb['a'] = null;
    print_r($bbb); //Array ( [a] => [b] => 2 ) ,用 = null,数组中这一项还存在,只是为空了
  ?>
 

(编辑:安阳站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读