详解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对象类型判断
Aug 27 PHP
PHP 八种基本的数据类型小结
Jun 01 PHP
PHP程序开发范例学习之表单 获取文本框的值
Aug 08 PHP
ThinkPHP验证码使用简明教程
Mar 05 PHP
PHP面向对象精要总结
Nov 07 PHP
PHP永久登录、记住我功能实现方法和安全做法
Apr 27 PHP
PHP中如何使用session实现保存用户登录信息
Oct 20 PHP
PHP实现操作redis的封装类完整实例
Nov 14 PHP
PHP Imagick完美实现图片裁切、生成缩略图、添加水印
Feb 22 PHP
Yii2中YiiBase自动加载类、引用文件方法分析(autoload)
Jul 25 PHP
Linux下快速搭建php开发环境
Mar 13 PHP
php无限极分类实现方法分析
Jul 04 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
TMDPHP 模板引擎使用教程
2012/03/13 PHP
解析PHP函数array_flip()在重复数组元素删除中的作用
2013/06/27 PHP
PHP 面向对象程序设计(oop)学习笔记(三) - 单例模式和工厂模式
2014/06/12 PHP
PHP fastcgi模式上传大文件(大约有300多K)报错
2014/09/28 PHP
thinkphp中ajax与php响应过程详解
2014/12/08 PHP
yii2 开发api接口时优雅的处理全局异常的方法
2019/05/14 PHP
ThinkPHP5&amp;5.1实现验证码的生成、使用及点击刷新功能示例
2020/02/07 PHP
Alliance vs AM BO3 第二场2.13
2021/03/10 DOTA
JS获取整个页面文档的实现代码
2011/12/15 Javascript
点击按钮自动加关注的代码(sina微博/QQ空间/人人网/腾讯微博)
2014/01/02 Javascript
jquery 操作两个select实现值之间的互相传递
2014/03/07 Javascript
jquery根据锚点offset值实现动画切换
2014/09/11 Javascript
JavaScript中setUTCFullYear()方法的使用简介
2015/06/12 Javascript
移动Web中图片自适应的两种JavaScript解决方法
2015/06/18 Javascript
浅析JSONP技术原理及实现
2016/06/08 Javascript
JavaScript prototype属性详解
2016/10/25 Javascript
JS正则子匹配实例分析
2016/12/22 Javascript
php输出全部gb2312编码内的汉字方法
2017/03/04 Javascript
jQuery Masonry瀑布流布局神器使用详解
2017/05/25 jQuery
Node.js学习之TCP/IP数据通讯(实例讲解)
2017/10/11 Javascript
纯JS实现出生日期[年月日]下拉菜单效果
2018/06/01 Javascript
Async/Await替代Promise的6个理由
2019/06/15 Javascript
Python编程中的异常处理教程
2015/08/21 Python
Python实现多进程的四种方式
2019/02/22 Python
Python列表原理与用法详解【创建、元素增加、删除、访问、计数、切片、遍历等】
2019/10/30 Python
Python递归函数特点及原理解析
2020/03/04 Python
美国优质马术服装购买网站:Breeches.com
2019/12/16 全球购物
医学专业应届生的自我评价
2014/02/28 职场文书
幼儿园招生广告
2014/03/19 职场文书
财务部岗位职责
2015/02/03 职场文书
停水通知
2015/04/16 职场文书
2015年新教师个人工作总结
2015/10/14 职场文书
Python预测分词的实现
2021/06/18 Python
Java基础之this关键字的使用
2021/06/30 Java/Android
详解JSON.parse和JSON.stringify用法
2022/02/18 Javascript
使用Cargo工具高效创建Rust项目
2022/08/14 Javascript