详解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伪造referer实例代码
Sep 20 PHP
PHP获取数组中某元素的位置及array_keys函数应用
Jan 29 PHP
php设计模式之单例模式使用示例
Jan 20 PHP
PHP GD库生成图像的几个函数总结
Nov 19 PHP
PHP中使用imagick生成PSD文件缩略图教程
Jan 26 PHP
迁移PHP版本到PHP7
Feb 06 PHP
Smarty变量用法详解
May 11 PHP
PHP实现多图上传(结合uploadify插件)思路分析
Nov 30 PHP
PHP PDOStatement::bindValue讲解
Jan 30 PHP
Laravel框架实现的上传图片到七牛功能详解
Sep 06 PHP
laravel 实现设置时区的简单方法
Oct 10 PHP
PHP 对象继承原理与简单用法示例
Apr 21 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
摩卡咖啡
2021/03/03 咖啡文化
PHP filter_var() 函数 Filter 函数
2012/04/25 PHP
php自动加载方式集合
2016/04/04 PHP
永不消失的title提示代码
2007/02/15 Javascript
利用javascript的面向对象的特性实现限制试用期
2011/08/04 Javascript
javascript实现tabs选项卡切换效果(自写原生js)
2013/03/19 Javascript
鼠标滑在标题上显示图片的JS代码
2013/11/19 Javascript
vue复合组件实现注册表单功能
2017/11/06 Javascript
vue实现文件上传功能
2018/08/13 Javascript
JavaScript动态检测密码强度原理及实现方法详解
2019/06/11 Javascript
[43:51]2014 DOTA2国际邀请赛中国区预选赛 Dream Times VS TongFu
2014/05/22 DOTA
[04:13]2014DOTA2国际邀请赛 专访DC目前形势不容乐观
2014/07/12 DOTA
利用Python自带PIL库扩展图片大小给图片加文字描述的方法示例
2017/08/08 Python
学生信息管理系统Python面向对象版
2019/01/30 Python
深入浅析python3中的unicode和bytes问题
2019/07/03 Python
将Pytorch模型从CPU转换成GPU的实现方法
2019/08/19 Python
解决Python对齐文本字符串问题
2019/08/28 Python
利用python在excel中画图的实现方法
2020/03/17 Python
Django模板获取field的verbose_name实例
2020/05/19 Python
Python如何避免文件同名产生覆盖
2020/06/09 Python
python-图片流传输的思路及示例(url转换二维码)
2020/12/21 Python
新西兰杂志订阅:isubscribe
2019/08/26 全球购物
GWT都有什么特性
2016/12/02 面试题
请用Python写一个获取用户输入数字,并根据数字大小输出不同信息的脚本
2014/05/20 面试题
优秀民警事迹材料
2014/01/29 职场文书
高中历史教学反思
2014/02/08 职场文书
中学生寄语大全
2014/04/03 职场文书
心理健康活动总结
2014/04/30 职场文书
工厂门卫的岗位职责
2014/07/27 职场文书
群众路线教育实践活动整改落实情况汇报
2014/10/28 职场文书
关于成立领导小组的通知
2015/04/23 职场文书
医院见习总结
2015/06/24 职场文书
KTV员工管理制度
2015/08/06 职场文书
SpringBoot实现quartz定时任务可视化管理功能
2021/08/30 Java/Android
使用CSS实现一个搜索引擎的原理解析
2021/09/25 HTML / CSS
Python 绘制多因子柱状图
2022/05/11 Python