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中$_REQUEST、$_POST、$_GET的区别和联系小结
Nov 23 PHP
PHP防止post重复提交数据的简单例子
Jun 07 PHP
ThinkPHP之import方法实例详解
Jun 20 PHP
PHP中使用Imagick实现各种图片效果实例
Jan 21 PHP
PHP实现根据银行卡号判断银行
Apr 29 PHP
php简单判断两个字符串是否相等的方法
Jul 13 PHP
php+ajax无刷新分页实例详解
Dec 07 PHP
CodeIgniter配置之routes.php用法实例分析
Jan 19 PHP
PHP实现文件上传下载实例
Oct 18 PHP
php实现购物车功能(以大苹果购物网为例)
Mar 09 PHP
Laravel 对某一列进行筛选然后求和sum()的例子
Oct 10 PHP
PHP中的输出echo、print、printf、sprintf、print_r和var_dump的示例代码
Dec 01 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
叶罗丽:为什么大家对颜冰这对CP非常关心,却对金茉两人十分冷漠
2020/03/17 国漫
一个ORACLE分页程序,挺实用的.
2006/10/09 PHP
php 时间计算问题小结
2009/01/04 PHP
解析smarty 截取字符串函数 truncate的用法介绍
2013/06/20 PHP
PHP使用xmllint命令处理xml与html的方法
2014/12/15 PHP
判断控件是否已加载完成的代码
2010/02/24 Javascript
js模拟select下拉菜单控件的代码
2013/05/08 Javascript
如何使用Javascript正则表达式来格式化XML内容
2013/07/04 Javascript
非html5实现js版弹球游戏示例代码
2013/09/22 Javascript
关于Javascript加载执行优化的研究报告
2014/12/16 Javascript
nodejs中实现sleep功能实例
2015/03/24 NodeJs
JavaScript中的Array 对象(数组对象)
2016/06/02 Javascript
AngularJS使用ng-repeat和ng-if实现数据的删选显示效果示例【适用于表单数据的显示】
2016/12/13 Javascript
Node.js利用断言模块assert进行单元测试的方法
2017/09/28 Javascript
JavaScript代码实现txt文件的上传预览功能
2018/03/27 Javascript
微信小程序获取用户信息的两种方法wx.getUserInfo与open-data实例分析
2019/05/03 Javascript
JavaScript命名空间模式实例详解
2019/06/20 Javascript
js实现简单掷骰子小游戏
2019/10/24 Javascript
JS实现判断移动端PC端功能
2020/02/21 Javascript
JavaScript ES6 Class类实现原理详解
2020/05/08 Javascript
Python 20行简单实现有道在线翻译的详解
2019/05/15 Python
Python实现带下标索引的遍历操作示例
2019/05/30 Python
使用 Python 快速实现 HTTP 和 FTP 服务器的方法
2019/07/22 Python
python实现超市管理系统(后台管理)
2019/10/25 Python
浅谈python元素如何去重,去重后如何保持原来元素的顺序不变
2020/02/28 Python
Python3 assert断言实现原理解析
2020/03/02 Python
pycharm 关掉syntax检查操作
2020/06/09 Python
使用python将微信image下.dat文件解密为.png的方法
2020/11/30 Python
HTML5页面无缝闪开的问题及解决方案
2020/06/11 HTML / CSS
美国女孩洋娃娃店:American Girl
2017/10/24 全球购物
Ray-Ban雷朋太阳眼镜英国官网:Ray-Ban UK
2019/11/23 全球购物
JavaScript实现页面动态验证码的实现示例
2021/03/23 Javascript
校庆团日活动总结
2014/08/28 职场文书
考试作弊检讨
2015/01/27 职场文书
SpringBoot系列之MongoDB Aggregations用法详解
2022/02/12 MongoDB
opencv深入浅出了解机器学习和深度学习
2022/03/17 Python