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 相关文章推荐
一个分页的论坛
Oct 09 PHP
php在window iis的莫名问题的测试方法
May 14 PHP
php接口与接口引用的深入解析
Aug 09 PHP
php将数组存储为文本文件方法汇总
Oct 28 PHP
CI配置多数据库访问的方法
Mar 28 PHP
Yii实现简单分页的方法
Apr 29 PHP
php 如何设置一个严格控制过期时间的session
May 05 PHP
利用php + Laravel如何实现部署自动化详解
Oct 11 PHP
thinkphp5 migrate数据库迁移工具
Feb 20 PHP
PHP单例模式模拟Java Bean实现方法示例
Dec 07 PHP
关于Curl在Swoole协程中的解决方案详析
Sep 12 PHP
laravel按天、按小时,查询数据的实例
Oct 09 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 七大优势分析
2009/06/23 PHP
php通过文件头检测文件类型通用代码类(zip,rar等)
2010/10/19 PHP
一个PHP分页类的代码
2011/05/18 PHP
fgetcvs在linux的问题
2012/01/15 PHP
wordpress自定义url参数实现路由功能的代码示例
2013/11/28 PHP
phpStudy访问速度慢和启动失败的解决办法
2015/11/19 PHP
jquerymobile checkbox及时刷新才能获取其准确值
2012/04/14 Javascript
json对象转字符串如何实现
2012/12/02 Javascript
javascript自适应宽度的瀑布流实现思路
2013/02/20 Javascript
js select option对象小结
2013/12/20 Javascript
Javascript实现获取窗口的大小和位置代码分享
2014/12/04 Javascript
JQuery给网页更换皮肤的方法
2015/05/30 Javascript
Winform客户端向web地址传参接收参数的方法
2016/05/17 Javascript
实用又漂亮的BootstrapValidator表单验证插件
2016/05/30 Javascript
js与jquery正则验证电子邮箱、手机号、邮政编码的方法
2016/07/04 Javascript
jQuery基本选择器之标签名选择器
2016/09/03 Javascript
JS实现可编辑的后台管理菜单功能【附demo源码下载】
2016/09/13 Javascript
Element UI框架中巧用树选择器的实现
2018/12/12 Javascript
jQuery实现验证用户登录
2019/12/10 jQuery
微信小程序手动添加收货地址省市区联动
2020/05/18 Javascript
vscode中的vue项目报错Property ‘xxx‘ does not exist on type ‘CombinedVueInstance<{ readyOnly...Vetur(2339)
2020/09/11 Javascript
TypeScript 运行时类型检查补充工具
2020/09/28 Javascript
ant design vue导航菜单与路由配置操作
2020/10/28 Javascript
python3生成随机数实例
2014/10/20 Python
asyncio 的 coroutine对象 与 Future对象使用指南
2016/09/11 Python
Python figure参数及subplot子图绘制代码
2020/04/18 Python
新版Pycharm中Matplotlib不会弹出独立的显示窗口的问题
2020/06/02 Python
python如何写个俄罗斯方块
2020/11/06 Python
Python中过滤字符串列表的方法
2020/12/22 Python
详解h5页面在不同ios设备上的问题总结
2019/03/01 HTML / CSS
J2EE模式面试题
2016/10/11 面试题
前厅部经理岗位职责范文
2014/02/04 职场文书
科级干部考察材料
2014/02/15 职场文书
入学申请自荐信范文
2014/02/26 职场文书
党员评议个人总结
2014/10/20 职场文书
对讲机的最大通讯距离是多少
2022/02/18 无线电