php 多个变量指向同一个引用($b = &$a)用法分析


Posted in PHP onNovember 13, 2019

本文实例讲述了php 多个变量指向同一个引用($b = &$a)用法。分享给大家供大家参考,具体如下:

引用是什么?
引用就是多个变量指向同一个内存区域地址。如我们经常用的实例一个类,就是内存中开辟了一个区域存储实例的类,实例赋值给变量就是让这个变量指向这个内存区域。

多个变量指向同一个引用有什么好处?
节约了内存空间,多个变量指向同一个内存地址,在调用的时候多个变量都是指向的同一个内存地址。

多个变量指向同一个引用的缺点
要注意使用安全,即是由于多个变量都是指向的同一个内存地址,其中一个变量更改了某个属性,其它的变量调用的时候都是用的已经更改的实例。

在php 中我们为一个变量赋值的时候会在内存中开辟一个区域存储该值。那么我们将这个变量赋值给另一个变量的时候会在内存中重新开辟一个区域去存储改值吗? 我做了如下实验

<?php
$d = "aaa";
$c = $d;
echo $c . "<br />";
$d = "bbb";
echo $c . "<br />";
/**
 * 执行结果是
 * aaa
 * aaa
 */
?>

看到这里 不知道你理解了没有,创建的变量$d 并为之赋初始值aaa 再将$d 赋值给$c,之后输出$c 然后更改$d的值,在输出$c。这个实验告诉我们,$d再给$c赋值的时候是在内存中重新开辟了一个区域的。

那么,我们怎么才能让$d和$c 都指向一个引用呢? 查了下资料 如下方法 让两个变量指向同一个内存地址

<?php
$a = "123";
$b = &$a;
echo $b."<br />";
$a = "456";
echo $b;
/**
 * 运行结果如下
 * 123
 * 456
 */
?>

我更改了一下变量的名字。方便测试发现区别。在这里我们可以看到 $b=&$a 其中&符号的作用就是让$b 指向的是$a的内存区域,而不是重新开辟一个区域。所以当更改$a的值的时候$b也会随着变化。

前面我们实验的对象是基本字符串,现在我们来看下类是否遵从这个规则

<?php
class Demo
{
  public $demo = "aaaa";
}
$demo1 = new Demo();
$demo2 = $demo1;
echo $demo2->demo . "<br />";
$demo1->demo = "bbbb";
echo $demo2->demo . "<br />";
/**
 * 运行结果
 * aaaa
 * bbbb
 */
?>

我这里并没有&符号指定$demo2必须指向$demo1 的内存区域,所以关于类,当一个实例变量赋值给另一个变量的时候默认就是两个变量指向同一个引用;

php 的引用我觉得没有 java的好用,也许是这门语言本身还在发展,很多处理还没有那么方便完善。 java初去基本数据类型(int、long、byte、short、char、boolean、float、double等),两个变量赋值都是指向同一个内存地址,而且不用你特意去指定。

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
两个强悍的php 图像处理类1
Jun 15 PHP
smarty巧妙处理iframe中内容页的代码
Mar 07 PHP
PHP类的反射用法实例
Nov 03 PHP
PHP批量去除BOM头代码分享
Jun 26 PHP
用PHP代码在网页上生成图片
Jul 01 PHP
百万级别知乎用户数据抓取与分析之PHP开发
Sep 28 PHP
我整理的PHP 7.0主要新特性
Jan 07 PHP
PHP实现长文章分页实例代码(附源码)
Feb 03 PHP
利用PHP将图片转换成base64编码的实现方法
Sep 13 PHP
浅谈Laravel队列实现原理解决问题记录
Aug 19 PHP
thinkPHP5框架设置404、403等http状态页面的方法
Jun 05 PHP
Yii框架数据库查询、增加、删除操作示例
Oct 14 PHP
php 自定义函数实现将数据 以excel 表格形式导出示例
Nov 13 #PHP
php array 转json及java 转换 json数据格式操作示例
Nov 13 #PHP
Yii框架学习笔记之应用组件操作示例
Nov 13 #PHP
Yii框架自定义数据库操作组件示例
Nov 11 #PHP
php接口隔离原则实例分析
Nov 11 #PHP
Yii框架布局文件的动态切换操作示例
Nov 11 #PHP
Yii框架模拟组件调用注入示例
Nov 11 #PHP
You might like
PHP VS ASP
2006/10/09 PHP
PHP 第二节 数据类型之数值型
2012/04/28 PHP
PHP函数分享之curl方式取得数据、模拟登陆、POST数据
2014/06/04 PHP
PHP使用pdo实现事务处理操作示例
2018/09/05 PHP
document.body.scrollTop 值总为0的解决方法 比较常见的标准问题
2009/11/30 Javascript
javascript+css 网页每次加载不同样式的实现方法
2009/12/27 Javascript
用jquery实现的模拟QQ邮箱里的收件人选取及其他效果(一)
2011/01/06 Javascript
javascript parseInt() 函数的进制转换注意细节
2013/01/08 Javascript
jQuery图片的展开和收缩实现代码
2013/04/16 Javascript
自己写的Javascript计算时间差函数
2013/10/28 Javascript
深入理解JQuery keyUp和keyDown的区别
2013/12/12 Javascript
使用Angular缓存父页面数据的方法
2017/01/03 Javascript
jQuery插件ImgAreaSelect实现头像上传预览和裁剪功能实例讲解一
2017/05/26 jQuery
Javascript继承机制详解
2017/05/30 Javascript
jQuery 1.9版本以上的浏览器判断方法代码分享
2017/08/28 jQuery
使用Vue自定义数字键盘组件(体验度极好)
2017/12/19 Javascript
深入理解nodejs搭建静态服务器(实现命令行)
2019/02/05 NodeJs
微信小程序控制台提示warning:Now you can provide attr &quot;wx:key&quot; for a &quot;wx:for&quot; to improve performance解决方法
2019/02/21 Javascript
微信小程序用户授权,以及判断登录是否过期的方法
2019/05/10 Javascript
Python 遍历列表里面序号和值的方法(三种)
2017/02/17 Python
Python字典数据对象拆分的简单实现方法
2017/12/05 Python
tensorflow获取变量维度信息
2018/03/10 Python
解决python中os.listdir()函数读取文件夹下文件的乱序和排序问题
2018/10/17 Python
python 快速把超大txt文件转存为csv的实例
2018/10/26 Python
Python之指数与E记法的区别详解
2019/11/21 Python
python3跳出一个循环的实例操作
2020/08/18 Python
pytorch使用horovod多gpu训练的实现
2020/09/09 Python
python的链表基础知识点
2020/09/13 Python
CSS3轻松实现圆角效果
2017/11/09 HTML / CSS
汽车检测与维修个人求职信
2013/09/24 职场文书
岗位职责风险点
2014/03/12 职场文书
医院护士见习期自我鉴定
2014/04/10 职场文书
关于安全的演讲稿
2014/05/09 职场文书
党课培训心得体会
2014/09/02 职场文书
2015年话务员工作总结
2015/04/29 职场文书
单位同意报考证明
2015/06/17 职场文书