详解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实现框架(二)
Oct 09 PHP
常用的php ADODB使用方法集锦
Mar 25 PHP
AMFPHP php远程调用(RPC, Remote Procedure Call)工具 快速入门教程
May 10 PHP
php visitFile()遍历指定文件夹函数
Aug 21 PHP
php递归删除目录下的文件但保留的实例分享
May 10 PHP
php实现的替换敏感字符串类实例
Sep 22 PHP
php清除和销毁session的方法分析
Mar 19 PHP
PHP递归遍历指定目录的文件并统计文件数量的方法
Mar 24 PHP
php实现CSV文件导入和导出
Oct 24 PHP
php如何控制用户对图片的访问 PHP禁止图片盗链
Mar 25 PHP
基于swoole实现多人聊天室
Jun 14 PHP
使用Zookeeper分布式部署PHP应用程序
Mar 15 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
解析coreseek for sphinx的使用
2013/06/21 PHP
php绘制一条直线的方法
2015/01/24 PHP
php生成RSS订阅的方法
2015/02/13 PHP
Laravel如何同时连接多个数据库详解
2019/08/13 PHP
DHTML 中的绝对定位
2006/11/26 Javascript
js中将多个语句写成一个语句的两种方法小结
2007/12/08 Javascript
JavaScript Eval 函数使用
2010/03/23 Javascript
JavaScript 面向对象的之私有成员和公开成员
2010/05/04 Javascript
jQuery 表单验证扩展(三)
2010/10/20 Javascript
jquery实现简单易懂的图片展示小例子
2013/11/21 Javascript
JavaScript也谈内存优化
2014/06/06 Javascript
jQuery实现鼠标经过事件的延时处理效果
2020/08/20 Javascript
AngularJS Module方法详解
2015/12/08 Javascript
JavaScript匿名函数之模仿块级作用域
2015/12/12 Javascript
JavaScript中的数组遍历forEach()与map()方法以及兼容写法介绍
2016/05/19 Javascript
Javascript的动态增加类的实现方法
2016/10/20 Javascript
微信小程序  action-sheet详解及实例代码
2016/11/09 Javascript
详解vue嵌套路由-params传递参数
2017/05/23 Javascript
详解微信第三方小程序代开发
2017/06/23 Javascript
详解Ubuntu安装angular-cli遇到的坑
2018/09/08 Javascript
php使用递归与迭代实现快速排序示例
2014/01/23 Python
wxpython中自定义事件的实现与使用方法分析
2016/07/21 Python
Python 隐藏输入密码时屏幕回显的实例
2019/02/19 Python
python简单鼠标自动点击某区域的实例
2019/06/25 Python
Django celery异步任务实现代码示例
2020/11/26 Python
使用CSS3制作倾斜导航条和毛玻璃效果
2017/09/12 HTML / CSS
控制工程专业个人求职信
2013/09/25 职场文书
会计实习生自我鉴定
2013/12/12 职场文书
六月份红领巾广播稿
2014/02/03 职场文书
党校学习自我鉴定
2014/02/24 职场文书
秋季运动会广播稿(30篇)
2014/09/13 职场文书
幼儿园小班开学寄语
2015/05/27 职场文书
2016个人先进事迹材料范文
2016/03/01 职场文书
nginx配置文件使用环境变量的操作方法
2021/06/02 Servers
MySQL8.0无法启动3534的解决方法
2021/06/03 MySQL
详细谈谈MYSQL中的COLLATE是什么
2021/06/11 MySQL