详解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 09 PHP
在windows iis5下安装php4.0+mysql之我见
Oct 09 PHP
PHP zlib扩展实现页面GZIP压缩输出
Jun 17 PHP
PHP转换IP地址到真实地址的方法详解
Jun 09 PHP
使用PHP求两个文件的相对路径
Jun 20 PHP
PHP使用imagick读取PDF生成png缩略图的两种方法
Mar 20 PHP
PHP中把错误日志保存在系统日志中(Windows系统)
Jun 23 PHP
php+mysql实现无限级分类
Nov 11 PHP
基于yaf框架和uploadify插件,做的一个导入excel文件,查看并保存数据的功能
Jan 24 PHP
PHP实现微信模拟登陆并给用户发送消息的方法【文字,图片,图文】
Jun 29 PHP
PHP+redis实现的悲观锁机制示例
Jun 12 PHP
php获取用户真实IP和防刷机制的实例代码
Nov 28 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 数组教程 定义数组
2009/10/23 PHP
php缩放图片(根据宽高的等比例缩放)实例介绍
2013/06/09 PHP
PHP实现简单搜歌的方法
2015/07/28 PHP
smarty学习笔记之常见代码段用法总结
2016/03/19 PHP
PHP实现获取第一个中文首字母并进行排序的方法
2017/05/09 PHP
浅谈laravel数据库查询返回的数据形式
2019/10/21 PHP
用正则表达式 动态创建/增加css style script 兼容IE firefox
2009/03/10 Javascript
js文件包含的几种方式介绍
2014/09/28 Javascript
jQuery插件Timelinr 实现时间轴特效
2015/10/04 Javascript
jquery动态增加删减表格行特效
2015/11/20 Javascript
正则表达式优化JSON字符串的技巧
2015/12/24 Javascript
requireJS使用指南
2016/04/27 Javascript
JavaScript省市区三级联动菜单效果
2016/09/21 Javascript
JavaScript实现页面定时刷新(定时器,meta)
2016/10/12 Javascript
js实现密码强度检验
2017/01/15 Javascript
Webpack框架核心概念(知识点整理)
2017/12/22 Javascript
vue-cli 引入、配置axios的方法
2018/05/08 Javascript
记一次vue去除#问题处理经过小结
2019/01/24 Javascript
微信小程序通过一个json实现分享朋友圈图片
2019/09/03 Javascript
Vue的transition-group与Virtual Dom Diff算法的使用
2019/12/09 Javascript
js+h5 canvas实现图片验证码
2020/10/11 Javascript
[36:17]DOTA2上海特级锦标赛 - VGL音乐会全集
2016/03/06 DOTA
tensorflow获取预训练模型某层参数并赋值到当前网络指定层方式
2020/01/24 Python
python中upper是做什么用的
2020/07/20 Python
详解Pycharm安装及Django安装配置指南
2020/09/15 Python
python 三种方法提取pdf中的图片
2021/02/07 Python
html5+css3之动画在webapp中的应用
2014/11/21 HTML / CSS
Melijoe时尚童装德国官网:Melijoe德国
2016/09/03 全球购物
医药工作者的求职信范文
2013/09/21 职场文书
财务会计应届生求职信
2013/11/24 职场文书
kfc实习自我鉴定
2013/12/14 职场文书
民族团结先进个人材料
2014/02/05 职场文书
乡镇党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
2015年乡镇民政工作总结
2015/05/13 职场文书
同事去世追悼词
2015/06/23 职场文书
python库Tsmoothie模块数据平滑化异常点抓取
2022/06/10 Python