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正则匹配汉字的方法介绍
Apr 25 PHP
国外十大最流行的PHP框架排名
Jul 04 PHP
PHP中替换键名的简易方法示例详解
Jan 07 PHP
ThinkPHP3.1新特性之G方法的使用
Jun 19 PHP
ThinkPHP中url隐藏入口文件后接收alipay传值的方法
Dec 09 PHP
PHP解压tar.gz格式文件的方法
Feb 14 PHP
深入理解PHP中的empty和isset函数
May 26 PHP
PHP类和对象相关系统函数与运算符小结
Sep 28 PHP
PHP实现json_decode不转义中文的方法
May 20 PHP
PHP序列化的四种实现方法与横向对比
Nov 29 PHP
php DES加密算法实例分析
Sep 18 PHP
PHP函数用法详解【初始化、嵌套、内置函数等】
Jun 02 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 阴历-农历-转换类代码
2012/01/16 PHP
50个PHP程序性能优化的方法
2014/06/02 PHP
ThinkPHP实现事务回滚示例代码
2014/06/23 PHP
基于jQuery的日期选择控件
2009/10/27 Javascript
文本框的字数限制功能jquery插件
2009/11/24 Javascript
基于jquery实现的类似百度搜索的输入框自动完成功能
2011/08/23 Javascript
js操作label给label赋值及取label的值示例
2013/11/07 Javascript
javascript制作的网页侧边弹出框思路及实现代码
2014/05/21 Javascript
jqueryMobile使用示例分享
2016/01/12 Javascript
jQuery中on绑定事件后引发的事件冒泡问题如何解决
2016/05/25 Javascript
JQuery在循环中绑定事件的问题详解
2016/06/02 Javascript
Javascript数组循环遍历之forEach详解
2016/11/07 Javascript
原生JS查找元素的方法(推荐)
2016/11/22 Javascript
浅析上传头像示例及其注意事项
2016/12/14 Javascript
二维码图片生成器QRCode.js简单介绍
2017/08/18 Javascript
vue.js中proxyTable 转发请求的实现方法
2018/09/20 Javascript
详解Vue的常用指令v-if, v-for, v-show,v-else, v-bind, v-on
2018/10/12 Javascript
微信小程序实现的一键拨号功能示例
2019/04/24 Javascript
跟老齐学Python之不要红头文件(2)
2014/09/28 Python
Python用GET方法上传文件
2015/03/10 Python
Python中模块与包有相同名字的处理方法
2017/05/05 Python
详谈python read readline readlines的区别
2017/09/22 Python
Python实现打印螺旋矩阵功能的方法
2017/11/21 Python
动态规划之矩阵连乘问题Python实现方法
2017/11/27 Python
利用pandas进行大文件计数处理的方法
2018/07/25 Python
使用EduBlock轻松学习Python编程
2018/10/08 Python
python 多线程将大文件分开下载后在合并的实例
2018/11/09 Python
基于Numpy.convolve使用Python实现滑动平均滤波的思路详解
2019/05/16 Python
python 实现百度网盘非会员上传超过500个文件的方法
2021/01/07 Python
CSS3 media queries + jQuery实现响应式导航
2016/09/30 HTML / CSS
2014年信访工作总结
2014/11/17 职场文书
python tkinter实现定时关机
2021/04/21 Python
Django项目如何正确配置日志(logging)
2021/04/29 Python
英镑符号 £
2022/02/17 杂记
Mybatis-Plus进阶分页与乐观锁插件及通用枚举和多数据源详解
2022/03/21 Java/Android
SpringCloud超详细讲解Feign声明式服务调用
2022/06/21 Java/Android