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


Posted in PHP onMarch 23, 2019

本文实例为大家分享了PHP变量传值赋值和引用赋值变量销毁的具体代码,供大家参考,具体内容如下

<?php
   $a = 100;
   $b = 200;
   var_dump($a,$b); //int(100) int(200)
 ?>

php中,上面的代码,变量是怎么存放的呢?

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

上面的代码变动下,将变量b赋值给变量a,会发生什么?

<?php
  $a = 100;
  $b = 200;
  $a = $b;/*多了这个*/
  var_dump($a,$b); //int(200) int(200)
?>

问题来了,$a = $b,那么是将变量a的指针指向了变量b指针所指向的位置?还是变量a指向的位置的值变了?

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

引用赋值和上面传值赋值不同,引用赋值是两个变量指向一个地方,一旦这样,一改俱改。

怎么引用赋值呢?变量名前加&即可,

$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)  一改俱改
?>

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

<?php
/*理解下面的话*/

$a = 100; 
//变量a赋值int 100 ,100是基础数据类型,不是变量,是存在变量指向位置的

$a = $b;
//变量b的值 赋值 给变量a,变量a,b各有各的指向,执行之后,各是各的。

$a = &$b;
//变量b的值的地址 赋值给变量 a ,变量a,b共用一个地址哦!一改俱改!


?>
<?php
/*


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,数组中这一项还存在,只是为空了
?>

以上所述是小编给大家介绍的PHP变量传值赋值和引用赋值变量销毁详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
对盗链说再见...
Oct 09 PHP
基于mysql的论坛(7)
Oct 09 PHP
PHP中10个不常见却非常有用的函数
Mar 21 PHP
php中防止伪造跨站请求的小招式
Sep 02 PHP
PHP Class&amp;Object -- PHP 自排序二叉树的深入解析
Jun 25 PHP
php遍历文件夹下的所有文件和子文件夹示例
Mar 20 PHP
PHP反向代理类代码
Aug 15 PHP
PHP实现全角字符转为半角方法汇总
Jul 09 PHP
PHP模板引擎Smarty内置变量调解器用法详解
Apr 11 PHP
php实现的一段简单概率相关代码
May 30 PHP
PHP利用百度ai实现文本和图片审核
May 08 PHP
PHP7 安装event扩展的实现方法
Oct 08 PHP
laravel实现按时间日期进行分组统计方法示例
Mar 23 #PHP
PHP使用OB缓存实现静态化功能示例
Mar 23 #PHP
Laravel如何自定义command命令浅析
Mar 23 #PHP
PHP使用mysqli同时执行多条sql查询语句的实例
Mar 22 #PHP
PHP中命名空间的使用例子
Mar 22 #PHP
PHP SESSION机制的理解与实例
Mar 22 #PHP
PHP析构函数destruct与垃圾回收机制的讲解
Mar 22 #PHP
You might like
PHP防注入安全代码
2008/04/09 PHP
php制作动态随机验证码
2015/02/12 PHP
PHP生成zip压缩包的常用方法示例
2019/08/22 PHP
javascript 兼容FF的onmouseenter和onmouseleave的代码
2008/07/19 Javascript
javascript div 弹出可拖动窗口
2009/02/26 Javascript
js创建子窗口并且回传值示例代码
2013/07/02 Javascript
jquery+ajax实现跨域请求的方法
2015/01/20 Javascript
Jquery实现动态切换图片的方法
2015/05/18 Javascript
js实现div模拟模态对话框展现URL内容
2016/05/27 Javascript
webpack中使用iconfont字体图标的方法
2018/02/22 Javascript
利用jqgrid实现上移下移单元格功能
2018/11/07 Javascript
Javascript实现时间倒计时功能
2018/11/17 Javascript
微信小程序实现时间预约功能
2018/11/27 Javascript
Javascript Worker子线程代码实例
2020/02/20 Javascript
全面解析JavaScript Module模式
2020/07/24 Javascript
JavaScript语句错误throw、try及catch实例解析
2020/08/18 Javascript
python修改字典内key对应值的方法
2015/07/11 Python
Python解析json之ValueError: Expecting property name enclosed in double quotes: line 1 column 2(char 1)
2017/07/06 Python
python编写微信公众号首图思路详解
2019/12/13 Python
python对数组进行排序,并输出排序后对应的索引值方式
2020/02/28 Python
Python3.7在anaconda里面使用IDLE编译器的步骤详解
2020/04/29 Python
Django中的AutoField字段使用
2020/05/18 Python
python实现图书馆抢座(自动预约)功能的示例代码
2020/09/29 Python
html5弹跳球示例代码
2013/07/23 HTML / CSS
Trina Turk官网:美国时装和泳装品牌
2018/06/10 全球购物
学院领导推荐信
2013/10/30 职场文书
计算机应用与科学个人的自我评价
2013/11/15 职场文书
煤矿机修工岗位职责
2014/02/07 职场文书
火锅店的活动方案
2014/08/15 职场文书
维护民族团结演讲稿
2014/08/27 职场文书
学校群众路线专项整治方案
2014/10/31 职场文书
暂住证证明
2015/06/19 职场文书
《失物招领》教学反思
2016/02/20 职场文书
《草船借箭》教学反思
2016/02/23 职场文书
给原生html中添加水印遮罩层的实现示例
2021/04/02 Javascript
MySQL数据库⾼可⽤HA实现小结
2022/01/22 MySQL