详解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 相关文章推荐
PHP 批量删除数据的方法分析
Oct 30 PHP
PHP发明人谈MVC和网站设计架构 貌似他不支持php用mvc
Jun 04 PHP
调整PHP的性能
Oct 30 PHP
php计算两个日期时间差(返回年、月、日)
Jun 19 PHP
php中实现xml与mysql数据相互转换的方法
Dec 25 PHP
php对文件进行hash运算的方法
Apr 03 PHP
PHP读取文件内容的五种方式
Dec 28 PHP
smarty的section嵌套循环用法示例
May 28 PHP
PHP魔术方法之__call与__callStatic使用方法
Jul 23 PHP
Laravel框架模板加载,分配变量及简单路由功能示例
Jun 11 PHP
在 Laravel 6 中缓存数据库查询结果的方法
Dec 11 PHP
THINKPHP5.1 Config的配置与获取详解
Jun 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
饭制《星际争霸》Mod:优化游戏机制 增加新单位
2017/07/02 星际争霸
安健A254立体声随身听的分析与打磨
2021/03/02 无线电
PHP自动更新新闻DIY
2006/10/09 PHP
LotusPhp笔记之:基于ObjectUtil组件的使用分析
2013/05/06 PHP
老生常谈PHP面向对象之命令模式(必看篇)
2017/05/24 PHP
php微信开发之关注事件
2018/06/14 PHP
php和asp语法上的区别总结
2019/05/12 PHP
用于节点操作的API,颠覆原生操作HTML DOM节点的API
2010/12/11 Javascript
jQuery左侧大图右侧小图焦点图幻灯切换代码分享
2015/08/19 Javascript
JS实现鼠标滑过折叠与展开菜单效果代码
2015/09/06 Javascript
JavaScript绑定事件监听函数的通用方法
2016/05/14 Javascript
微信小程序开发之圆形菜单 仿建行圆形菜单实例
2016/12/12 Javascript
jQuery延迟执行的实现方法
2016/12/21 Javascript
关于前后端json数据的发送与接收详解
2017/07/30 Javascript
vue.js图片转Base64上传图片并预览的实现方法
2018/08/02 Javascript
微信小程序开发之路由切换页面重定向问题
2018/09/18 Javascript
使用element-ui的el-menu导航选中后刷新页面保持当前选中状态
2019/07/19 Javascript
layer关闭当前窗口页面以及确认取消按钮的方法
2019/09/09 Javascript
layer页面跳转,获取html子节点元素的值方法
2019/09/27 Javascript
解决Vue中的生命周期beforeDestory不触发的问题
2020/07/21 Javascript
Ubuntu下Anaconda和Pycharm配置方法详解
2019/06/14 Python
Python爬虫动态ip代理防止被封的方法
2019/07/07 Python
python opencv 简单阈值算法的实现
2019/08/04 Python
Python描述符descriptor使用原理解析
2020/03/21 Python
Pycharm安装并配置jupyter notebook的实现
2020/05/18 Python
css3.0 图形构成实例练习一
2013/03/19 HTML / CSS
支持IE8的纯css3开发的响应式设计动画菜单教程
2014/11/05 HTML / CSS
Mytheresa英国官网:拥有160多个奢侈品品牌
2016/10/09 全球购物
荷兰演唱会和体育比赛订票网站:viagogo荷兰
2018/04/08 全球购物
什么是组件架构
2016/05/15 面试题
怎样写好创业计划书的内容
2014/02/06 职场文书
学历公证委托书
2014/04/09 职场文书
2014审计局领导班子民主生活会对照检查材料思想汇报
2014/09/20 职场文书
努力学习保证书
2015/02/26 职场文书
2015年小学数学教师工作总结
2015/05/20 职场文书
python爬取网页版QQ空间,生成各类图表
2021/06/02 Python