详解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侧拉菜单 漂亮,可以向右或者向左展开,支持FF,IE
Oct 15 PHP
php 获取百度的热词数据的代码
Feb 18 PHP
PHP中iconv函数知识汇总
Jul 02 PHP
详解PHP序列化反序列化的方法
Oct 27 PHP
PHP中Http协议post请求参数
Nov 02 PHP
PHP使用pear实现mail发送功能 windows环境下配置pear
Apr 15 PHP
php 基础函数
Feb 10 PHP
PHP getNamespaces()函数讲解
Feb 03 PHP
PHP错误提示It is not safe to rely on the system……的解决方法
Mar 25 PHP
php 中的信号处理操作实例详解
Mar 04 PHP
thinkphp5.1 框架导入/导出excel文件操作示例
May 25 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 session机制
2011/07/17 PHP
CodeIgniter图像处理类的深入解析
2013/06/17 PHP
如何使用FireFox插件FirePHP调试PHP
2013/07/23 PHP
codeigniter集成ucenter1.6双向通信的解决办法
2014/06/12 PHP
详解php curl带有csrf-token验证模拟提交方法
2018/04/18 PHP
laravel框架实现后台登录、退出功能示例
2019/10/31 PHP
调用js时ie6和ie7,ff的区别
2009/08/19 Javascript
jQuery实现 注册时选择阅读条款 左右移动
2013/04/11 Javascript
页面加载完毕后滚动条自动滚动一定位置
2014/02/20 Javascript
javascript正则表达式参数/g与/i及/gi的使用指南
2014/08/27 Javascript
当前流行的JavaScript代码风格指南
2014/09/10 Javascript
node.js中的fs.truncateSync方法使用说明
2014/12/15 Javascript
jquery实现两个图片渐变切换效果的方法
2015/06/25 Javascript
浅谈javascript原型链与继承
2015/07/13 Javascript
JavaScript实现图片懒加载(Lazyload)
2016/11/28 Javascript
Sequelize中用group by进行分组聚合查询
2016/12/12 Javascript
JQuery和HTML5 Canvas实现弹幕效果
2017/01/04 Javascript
js操作浏览器的参数方法
2017/01/21 Javascript
Vue.js上传图片到阿里云OSS存储的方法示例
2018/12/13 Javascript
原生JS实现图片懒加载之页面性能优化
2019/04/26 Javascript
小程序实现上传视频功能
2020/08/18 Javascript
Python用模块pytz来转换时区
2016/08/19 Python
Python实现树莓派WiFi断线自动重连的实例代码
2017/03/16 Python
python处理xml文件的方法小结
2017/05/02 Python
Python读取视频的两种方法(imageio和cv2)
2018/04/15 Python
python3 判断列表是一个空列表的方法
2018/05/04 Python
python生成ppt的方法
2018/06/07 Python
Python实现查找字符串数组最长公共前缀示例
2019/03/27 Python
python 执行终端/控制台命令的例子
2019/07/12 Python
python 生成正态分布数据,并绘图和解析
2020/12/21 Python
正风肃纪剖析材料
2014/02/18 职场文书
旅游与环境专业求职信
2014/06/05 职场文书
教师竞聘上岗演讲稿
2014/09/03 职场文书
2015年质检工作总结
2015/05/04 职场文书
为自己工作观后感
2015/06/11 职场文书
儿子满月酒致辞
2015/07/29 职场文书