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下用cookie统计用户访问网页次数的代码
May 09 PHP
PHP 读取Postgresql中的数组
Apr 14 PHP
解析php时间戳与日期的转换
Jun 06 PHP
基于PHP Socket配置以及实例的详细介绍
Jun 13 PHP
ThinkPHP中公共函数路径和配置项路径的映射分析
Nov 22 PHP
php图片添加文字水印实现代码
Mar 15 PHP
php简单实现短网址(短链)还原的方法(测试可用)
May 09 PHP
thinkPHP数据库增删改查操作方法实例详解
Dec 06 PHP
THINKPHP在添加数据的时候获取主键id的值方法
Apr 03 PHP
Yii2设置默认控制器的两种方法
May 19 PHP
Yii2.0 RESTful API 基础配置教程详解
Dec 26 PHP
php和redis实现秒杀活动的流程
Jul 17 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读取目录树的实现方法分析
2019/03/22 PHP
Laravel5.5 实现后台管理登录的方法(自定义用户表登录)
2019/09/30 PHP
用JS提交参数创建form表单在FireFox中遇到的问题
2013/01/16 Javascript
Javascript对象属性方法汇总
2013/11/21 Javascript
同域jQuery(跨)iframe操作DOM(实例讲解)
2013/12/19 Javascript
js实现获取当前时间是本月第几周的方法
2015/08/11 Javascript
Extjs实现下拉菜单效果
2016/04/01 Javascript
javascript截图 jQuery插件imgAreaSelect使用详解
2016/05/04 Javascript
javascript 小数乘法结果错误的处理方法
2016/07/28 Javascript
JavaScript中最容易混淆的作用域、提升、闭包知识详解(推荐)
2016/09/05 Javascript
jQuery checkbox选中问题之prop与attr注意点分析
2016/11/15 Javascript
详解JSON1:使用TSQL查询数据和更新JSON数据
2016/11/21 Javascript
react-redux中connect()方法详细解析
2017/05/27 Javascript
详解使用webpack打包编写一个vue-toast插件
2017/11/08 Javascript
vue计算属性和监听器实例解析
2018/05/10 Javascript
security.js实现的RSA加密功能示例
2018/06/06 Javascript
vue2.0的虚拟DOM渲染思路分析
2018/08/09 Javascript
Vue实现剪切板图片压缩功能
2020/02/04 Javascript
Python中集合类型(set)学习小结
2015/01/28 Python
python常见排序算法基础教程
2017/04/13 Python
下载python中Crypto库报错:ModuleNotFoundError: No module named ‘Crypto’的解决
2018/04/23 Python
Python实现注册、登录小程序功能
2018/09/21 Python
在cmd中查看python的安装路径方法
2019/07/03 Python
Python文件操作基础流程解析
2020/03/19 Python
基于Python爬取素材网站音频文件
2020/10/21 Python
Jupyter Notebook添加代码自动补全功能的实现
2021/01/07 Python
压铸汽车模型收藏家:Diecastmodelswholesale.com
2016/12/21 全球购物
建筑设计师岗位职责
2013/11/18 职场文书
回门宴新郎答谢词
2014/01/12 职场文书
2014年医院十一国庆节活动方案
2014/09/15 职场文书
计算机实训报告范文
2014/11/05 职场文书
事业单位个人总结
2015/02/12 职场文书
经费申请报告范文
2015/05/18 职场文书
56句经典英文座右铭
2019/08/09 职场文书
Redis高级数据类型Hyperloglog、Bitmap的使用
2021/05/24 Redis
php png失真的原因及解决办法
2021/10/24 PHP