详解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 相关文章推荐
Dedecms V3.1 生成HTML速度的优化办法
Mar 18 PHP
php相当简单的分页类
Oct 02 PHP
PHP 读取和修改大文件的某行内容的代码
Oct 30 PHP
wordpress自定义url参数实现路由功能的代码示例
Nov 28 PHP
php实现的click captcha点击验证码类实例
Sep 23 PHP
php验证session无效的解决方法
Nov 04 PHP
PHP SESSION的增加、删除、修改、查看操作
Mar 20 PHP
PHP导入导出Excel代码
Jul 07 PHP
PHP简单实现断点续传下载的方法
Sep 25 PHP
利用php实现一周之内自动登录存储机制(cookie、session、localStorage)
Oct 31 PHP
PHP多线程模拟实现秒杀抢单
Feb 07 PHP
PHP后期静态绑定之self::限制实例分析
Dec 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
php 常用字符串函数总结
2008/03/15 PHP
PHP 防恶意刷新实现代码
2010/05/16 PHP
PHP 调试工具Debug Tools
2011/04/30 PHP
set_include_path和get_include_path使用及注意事项
2013/02/02 PHP
Zend Framework校验器Zend_Validate用法详解
2016/12/09 PHP
laravel-admin select框默认选中的方法
2019/10/03 PHP
window.location.reload()方法刷新页面弹出要再次显示该网页对话框
2013/04/24 Javascript
js中onload与onunload的使用示例
2013/08/25 Javascript
jQuery实现简易的天天爱消除小游戏
2015/10/16 Javascript
javascript实现密码验证
2015/11/10 Javascript
Javascript单例模式的介绍和实例
2016/10/08 Javascript
10分钟掌握XML、JSON及其解析
2020/12/06 Javascript
浅析bootstrap原理及优缺点
2017/03/19 Javascript
Vue.js tab实现选项卡切换
2017/05/16 Javascript
Swiper 4.x 使用方法(移动端网站的内容触摸滑动)
2018/05/17 Javascript
JS插件clipboard.js实现一键复制粘贴功能
2020/12/04 Javascript
webpack4.0 入门实践教程
2018/10/08 Javascript
vuejs+element UI点击编辑表格某一行时获取内容填入表单的示例
2018/10/31 Javascript
ES6 Symbol数据类型的应用实例分析
2019/06/26 Javascript
js实现点赞按钮功能的实例代码
2020/03/06 Javascript
[36:17]DOTA2上海特级锦标赛 - VGL音乐会全集
2016/03/06 DOTA
跟老齐学Python之玩转字符串(2)更新篇
2014/09/28 Python
python3将视频流保存为本地视频文件
2018/06/20 Python
python中正则表达式与模式匹配
2019/05/07 Python
Django 重写用户模型的实现
2019/07/29 Python
Python使用ElementTree美化XML格式的操作
2020/03/06 Python
详解Django配置JWT认证方式
2020/05/09 Python
用Python爬取LOL所有的英雄信息以及英雄皮肤的示例代码
2020/07/13 Python
Python requests HTTP验证登录实现流程
2020/11/05 Python
python中四舍五入的正确打开方式
2021/01/18 Python
捷克体育用品购物网站:D-sport
2017/12/28 全球购物
美国著名的女性内衣零售商:Frederick’s of Hollywood
2018/02/24 全球购物
模具设计与制造专业自荐书
2014/07/01 职场文书
乡镇领导班子四风整顿行动工作汇报
2014/10/25 职场文书
银行反洗钱宣传活动总结
2015/05/08 职场文书
redis数据结构之压缩列表
2022/03/21 Redis