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开发中常用的三个表单验证函数使用小结
Mar 03 PHP
从康盛产品(discuz)提取出来的模板类
Jun 28 PHP
PHP中file_exists与is_file,is_dir的区别介绍
Sep 12 PHP
在windows平台上构建自己的PHP实现方法(仅适用于php5.2)
Jul 05 PHP
无刷新动态加载数据 滚动条加载适合评论等页面
Oct 16 PHP
使用PHP curl模拟浏览器抓取网站信息
Oct 28 PHP
去除php注释和去除空格函数分享
Mar 13 PHP
IIS6.0 开启Gzip方法及PHP Gzip函数分享
Jun 08 PHP
php获取客户端电脑屏幕参数的方法
Jan 09 PHP
php获取访问者浏览页面的浏览器类型
Jan 23 PHP
thinkphp下MySQL数据库读写分离代码剖析
Apr 18 PHP
Thinkphp5 微信公众号token验证不成功的原因及解决方法
Nov 12 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 程式大小
2006/12/06 PHP
php中目录,文件操作详谈
2007/03/19 PHP
php 上传功能实例代码
2010/04/13 PHP
从PHP的源码中深入了解stdClass类
2014/04/18 PHP
php实现带读写分离功能的MySQL类完整实例
2016/07/28 PHP
再次更新!MSClass (Class Of Marquee Scroll通用不间断滚动JS封装类 Ver 1.6)
2007/02/05 Javascript
javascript模仿msgbox提示效果代码
2008/06/10 Javascript
Js 本页面传值实现代码
2009/05/17 Javascript
jquery.ui.draggable中文文档
2009/11/24 Javascript
JavaScript Event事件学习第一章 Event介绍
2010/02/07 Javascript
JS request函数 用来获取url参数
2010/05/17 Javascript
一个JavaScript防止表单重复提交的实例
2014/10/21 Javascript
JavaScript弹出新窗口后向父窗口输出内容的方法
2015/04/06 Javascript
第六章之辅组类与响应式工具
2016/04/25 Javascript
微信小程序 省市区选择器实例详解(附源码下载)
2017/01/05 Javascript
Vue.js自定义指令的用法与实例解析
2017/01/18 Javascript
Vue 项目分环境打包的方法示例
2018/08/03 Javascript
javascript中的event loop事件循环详解
2018/12/14 Javascript
ES6 Array常用扩展的应用实例分析
2019/06/26 Javascript
基于javascript实现贪吃蛇小游戏
2019/11/25 Javascript
vue中渲染对象中属性时显示未定义的解决
2020/07/31 Javascript
video.js添加自定义组件的方法
2020/12/09 Javascript
Python将图片转换为字符画的方法
2020/06/16 Python
python顺序的读取文件夹下名称有序的文件方法
2018/07/11 Python
详解django中使用定时任务的方法
2018/09/27 Python
Python中turtle库的使用实例
2019/09/09 Python
Python循环实现n的全排列功能
2019/09/16 Python
Django自带的用户验证系统实现
2020/12/18 Python
html5启动原生APP总结
2020/07/03 HTML / CSS
阿迪达斯比利时官方商城:adidas比利时
2016/10/10 全球购物
现代家居用品及礼品:LBC Modern
2018/06/24 全球购物
领导干部遵守党的政治纪律情况思想汇报
2014/09/14 职场文书
2015年度员工自我评价范文
2015/03/11 职场文书
家长意见书
2015/06/04 职场文书
政审证明范文
2015/06/19 职场文书
python blinker 信号库
2022/05/04 Python