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 相关文章推荐
AJAX for PHP简单表数据查询实例
Jan 02 PHP
浅析PHP水印技术
Feb 14 PHP
php 数组的一个悲剧?
May 11 PHP
Mysql的Root密码忘记,查看或修改的解决方法(图文介绍)
Jun 14 PHP
PHP数字字符串左侧补0、字符串填充和自动补齐的几种方法
May 10 PHP
PHP callback函数使用方法和注意事项
Jan 23 PHP
php单例模式实现方法分析
Mar 14 PHP
3种php生成唯一id的方法
Nov 23 PHP
彻底搞懂PHP 变量结构体
Oct 11 PHP
thinkPHP5框架中widget的功能与用法详解
Jun 11 PHP
php无限级分类实现评论及回复功能
Feb 18 PHP
PHP简单验证码功能机制实例详解
Mar 27 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操作xml
2013/10/27 PHP
Yii2 GridView实现列表页直接修改数据的方法
2016/05/16 PHP
PHP 无限级分类
2017/05/04 PHP
关于ThinkPHP中的异常处理详解
2018/05/11 PHP
jquery blockUI 遮罩不能消失与不能提交的解决方法
2011/09/17 Javascript
jQuery源码分析-05异步队列 Deferred 使用介绍
2011/11/14 Javascript
关闭页面window.location事件未执行的原因及解决方法
2014/09/01 Javascript
JavaScript实现俄罗斯方块游戏过程分析及源码分享
2015/03/23 Javascript
jQuery消息提示框插件Tipso
2015/05/04 Javascript
简介JavaScript中strike()方法的使用
2015/06/08 Javascript
JQuery插入DOM节点的方法
2015/06/11 Javascript
javascript中对Date类型的常用操作小结
2016/05/19 Javascript
Three.js学习之正交投影照相机
2016/08/01 Javascript
利用JS屏蔽页面中的Enter按键提交表单的方法
2016/11/25 Javascript
JS简单实现动态添加HTML标记的方法示例
2018/04/08 Javascript
安装Node.js并启动本地服务的操作教程
2018/05/12 Javascript
Vue中android4.4不兼容问题的解决方法
2018/09/04 Javascript
基于vue实现圆形菜单栏组件
2019/07/05 Javascript
React学习之JSX与react事件实例分析
2020/01/06 Javascript
Python中Collection的使用小技巧
2014/08/18 Python
Python的Django框架下管理站点的基本方法
2015/07/17 Python
opencv python统计及绘制直方图的方法
2019/01/21 Python
Python进阶之@property动态属性的实现
2019/04/01 Python
​如何愉快地迁移到 Python 3
2019/04/28 Python
Python2.7实现多进程下开发多线程示例
2019/05/31 Python
基于Python下载网络图片方法汇总代码实例
2020/06/24 Python
解决PyCharm IDE环境下,执行unittest不生成测试报告的问题
2020/09/03 Python
基于python实现监听Rabbitmq系统日志代码示例
2020/11/28 Python
Python3爬虫ChromeDriver的安装实例
2021/02/06 Python
用HTML5制作数字时钟的教程
2015/05/11 HTML / CSS
联想美国官方商城:Lenovo美国
2017/06/19 全球购物
继承时候类的执行顺序问题,一般都是选择题,问你将会打印出什么?
2015/11/18 面试题
股份转让协议书
2014/04/12 职场文书
企业员工爱岗敬业演讲稿
2014/08/26 职场文书
贪污受贿检讨书范文
2014/11/19 职场文书
旅行社计调工作总结
2015/08/12 职场文书