详解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下MAIL的另一解决方案
Oct 09 PHP
[原创]PHP中通过ADODB库实现调用Access数据库之修正版本
Dec 31 PHP
PHP 循环列出目录内容的函数代码
May 26 PHP
PHP三元运算符的结合性介绍
Jan 10 PHP
基于curl数据采集之正则处理函数get_matches的使用
Apr 28 PHP
探讨PHP JSON中文乱码的解决方法详解
Jun 06 PHP
php中出现空白页的原因及解决方法汇总
Jul 08 PHP
PHP里的单例类写法实例
Jun 25 PHP
深入理解PHP之源码目录结构与功能说明
Jun 01 PHP
3种方法轻松处理php开发中emoji表情的问题
Jul 18 PHP
详解Yii2 定制表单输入字段的标签和样式
Jan 04 PHP
PHP实现类似题库抽题效果
Aug 16 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实现异步操作的研究
2013/02/03 PHP
php使用socket post数据到其它web服务器的方法
2015/06/02 PHP
PHP读取mssql json数据中文乱码的解决办法
2016/04/11 PHP
php抽象方法和抽象类实例分析
2016/12/07 PHP
PHP简单实现模拟登陆功能示例
2017/09/15 PHP
jquery下onpropertychange事件的绑定方法
2010/08/01 Javascript
jQuery的运行机制和设计理念分析
2011/04/05 Javascript
利用cookie记住背景颜色示例代码
2013/11/04 Javascript
Jquery实现动态切换图片的方法
2015/05/18 Javascript
跨域资源共享 CORS 详解
2016/04/26 Javascript
Jquery on方法绑定事件后执行多次的解决方法
2016/06/02 Javascript
如何用js实现鼠标向上滚动时浮动导航
2016/07/18 Javascript
js 点击a标签 获取a的自定义属性方法
2016/11/21 Javascript
JS轮播图实现简单代码
2021/02/19 Javascript
简单的vuex 的使用案例笔记
2018/04/13 Javascript
Vue分页插件的前后端配置与使用
2019/10/09 Javascript
使用JavaScript和MQTT开发物联网应用示例解析
2020/08/07 Javascript
Nuxt 项目性能优化调研分析
2020/11/07 Javascript
python 动态获取当前运行的类名和函数名的方法
2014/04/15 Python
简单介绍Python的Django框架的dj-scaffold项目
2015/05/30 Python
matplotlib作图添加表格实例代码
2018/01/23 Python
Python判断对象是否相等及eq函数的讲解
2019/02/25 Python
对Django的restful用法详解(自带的增删改查)
2019/08/28 Python
使用Python函数进行模块化的实现
2019/11/15 Python
基于python实现删除指定文件类型
2020/07/21 Python
利用pipenv和pyenv管理多个相互独立的Python虚拟开发环境
2020/11/01 Python
HTML5播放实现rtmp流直播
2020/06/16 HTML / CSS
快递业务员岗位职责
2014/01/06 职场文书
最新奶茶店创业计划书
2014/01/25 职场文书
节约用水标语
2014/06/11 职场文书
2014年学生会主席工作总结
2014/11/07 职场文书
2014年保管员工作总结
2014/11/18 职场文书
审查起诉阶段律师意见书
2015/05/19 职场文书
怎样写家长意见
2015/06/04 职场文书
4种非常实用的python内置数据结构
2021/04/28 Python
如何理解PHP核心特性命名空间
2021/05/28 PHP