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学习之PHP运算符
Oct 09 PHP
PHP获取当前文件所在目录 getcwd()函数
May 13 PHP
ThinkPHP3.1之D方法实例详解
Jun 20 PHP
完美解决thinkphp验证码出错无法显示的方法
Dec 09 PHP
php简单计算页面加载时间的方法
Jun 19 PHP
高质量PHP代码的50个实用技巧必备(下)
Jan 22 PHP
Yii中的relations数据关联查询及统计功能用法详解
Jul 14 PHP
总结PHP中DateTime的常用方法
Aug 11 PHP
PHP实现的曲线统计图表示例
Nov 10 PHP
Docker配置PHP开发环境教程
Dec 21 PHP
PHP框架laravel的.env文件配置教程
Jun 07 PHP
php设计模式之状态模式实例分析【星际争霸游戏案例】
Mar 26 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 inc文件使用的风险和注意事项
2013/11/12 PHP
PHP解码unicode编码的中文字符代码分享
2014/08/13 PHP
PHP超全局数组(Superglobals)介绍
2015/07/01 PHP
深入理解PHP原理之执行周期分析
2016/06/01 PHP
Yii实现的多级联动下拉菜单
2016/07/13 PHP
php实现socket推送技术的示例
2017/12/20 PHP
jquery formValidator插件ajax验证 内容不做任何修改再离开提示错误的bug解决方法
2013/01/04 Javascript
js 获取后台的字段 改变 checkbox的被选中的状态 代码
2013/06/05 Javascript
js 距离某一时间点时间是多少实现代码
2013/10/14 Javascript
js函数参数设置默认值的一种变通实现方法
2014/05/26 Javascript
JavaScript实现的简单拖拽效果
2015/06/01 Javascript
JavaScript中setUTCFullYear()方法的使用简介
2015/06/12 Javascript
Bootstrap表单布局样式源代码
2016/07/04 Javascript
jQuery+json实现动态创建复杂表格table的方法
2016/10/25 Javascript
JavaScript设计模式之建造者模式实例教程
2018/07/02 Javascript
移动端H5页面返回并刷新页面(BFcache)的方法
2018/11/06 Javascript
分享一个vue项目“脚手架”项目的实现步骤
2019/05/26 Javascript
解决Angularjs异步操作后台请求用$q.all排列先后顺序问题
2019/11/29 Javascript
详细分析vue响应式原理
2020/06/22 Javascript
[18:20]DOTA2 HEROS教学视频教你分分钟做大人-昆卡
2014/06/11 DOTA
[10:21]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Aster 选手采访
2021/03/11 DOTA
python通过索引遍历列表的方法
2015/05/04 Python
Python使用smtp和pop简单收发邮件完整实例
2018/01/09 Python
Python tkinter label 更新方法
2018/10/11 Python
python列表使用实现名字管理系统
2019/01/30 Python
Django框架中间件(Middleware)用法实例分析
2019/05/24 Python
python程序快速缩进多行代码方法总结
2019/06/23 Python
Python sklearn中的.fit与.predict的用法说明
2020/06/28 Python
Python根据字符串调用函数过程解析
2020/11/05 Python
ALLSAINTS英国官网:伦敦新锐潮流品牌
2016/09/19 全球购物
出纳员岗位职责
2014/03/13 职场文书
话题作文之学会尊重
2019/12/16 职场文书
background-position百分比原理详解
2021/05/08 HTML / CSS
pytorch锁死在dataloader(训练时卡死)
2021/05/28 Python
关于@OnetoMany关系映射的排序问题,使用注解@OrderBy
2021/12/06 Java/Android
Nginx如何配置多个服务域名解析共用80端口详解
2022/09/23 Servers