详解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
php中cookie的作用域
Mar 27 PHP
浅析php中jsonp的跨域实例
Jun 21 PHP
浅析ThinkPHP中execute和query方法的区别
Jun 13 PHP
php使用function_exists判断函数可用的方法
Nov 19 PHP
php写入数据到CSV文件的方法
Mar 14 PHP
php实现约瑟夫问题的方法小结
Mar 23 PHP
解决更换PHP5.4以上版本后Dedecms后台登录空白问题的方法
Oct 23 PHP
基于PHP实现等比压缩图片大小
Mar 04 PHP
3种方法轻松处理php开发中emoji表情的问题
Jul 18 PHP
php.ini中date.timezone设置详解
Nov 20 PHP
Yii2下点击验证码的切换实例代码
Mar 14 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
一条久听不愿放下的DIY森海MX500,三言两语话神奇
2021/03/02 无线电
高亮度显示php源代码
2006/10/09 PHP
PhpMyAdmin出现export.php Missing parameter: what /export_type错误解决方法
2012/08/09 PHP
thinkphp备份数据库的方法分享
2015/01/04 PHP
PHP设计模式之组合模式定义与应用示例
2020/02/01 PHP
JavaScript与C# Windows应用程序交互方法
2007/06/29 Javascript
jquery关于图形报表的运用实现代码
2011/01/06 Javascript
script不刷新页面的联动前后代码
2013/09/18 Javascript
基于JS代码实现图片在页面中旋转效果
2016/06/16 Javascript
如何防止INPUT按回车自动提交表单FORM
2016/12/06 Javascript
基于jQuery实现左侧菜单栏可折叠功能
2016/12/27 Javascript
ajax异步请求详解
2017/01/06 Javascript
javascript用rem来做响应式开发
2018/01/13 Javascript
详解JSON Web Token 入门教程
2018/07/30 Javascript
微信小程序 如何保持登录状态
2019/08/16 Javascript
layui lay-verify form表单自定义验证规则详解
2019/09/18 Javascript
详谈Vue.js框架下main.js,App.vue,page/index.vue之间的区别
2020/08/12 Javascript
vue3.0搭配.net core实现文件上传组件
2020/10/29 Javascript
Python函数返回值实例分析
2015/06/08 Python
Python实现文件复制删除
2016/04/19 Python
Python 互换字典的键值对实例
2019/02/12 Python
python下载微信公众号相关文章
2019/02/26 Python
python的re模块使用方法详解
2019/07/26 Python
python绘制BA无标度网络示例代码
2019/11/21 Python
PyCharm License Activation激活码失效问题的解决方法(图文详解)
2020/03/12 Python
Python3中对json格式数据的分析处理
2021/01/28 Python
利用CSS3实现开门效果实例源码
2016/08/22 HTML / CSS
CSS3实现莲花绽放的动画效果
2020/11/06 HTML / CSS
俄罗斯玩具、儿童用品、儿童服装和鞋子网上商店:MyToys.ru
2019/10/14 全球购物
护士自荐信范文
2013/12/15 职场文书
食品销售计划书
2014/04/26 职场文书
2014年党小组工作总结
2014/12/20 职场文书
幼儿园安全工作总结2015
2015/04/20 职场文书
2015年村党支部工作总结
2015/04/30 职场文书
奔腾年代观后感
2015/06/09 职场文书
python如何将mat文件转为png
2022/07/15 Python