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实现MySQL更新记录的代码
Jun 07 PHP
一步一步学习PHP(3) php 函数
Feb 15 PHP
php报表之jpgraph柱状图实例代码
Aug 22 PHP
有关phpmailer的详细介绍及使用方法
Jan 28 PHP
PHP把空格、换行符、中文逗号等替换成英文逗号的正则表达式
May 04 PHP
PHP获取当前页面URL函数实例
Oct 22 PHP
在Mac OS的PHP环境下安装配置MemCache的全过程解析
Feb 15 PHP
Yii2实现中国省市区三级联动实例
Feb 08 PHP
ThinkPHP实现附件上传功能
Apr 27 PHP
[原创]PHP实现字节数Byte转换为KB、MB、GB、TB的方法
Aug 31 PHP
php命令行写shell实例详解
Jul 19 PHP
PHP利用递归函数实现无限级分类的方法
Mar 22 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
用文本文件制作留言板提示(上)
2006/10/09 PHP
用php和MySql来与ODBC数据连接
2006/10/09 PHP
解决php的“It is not safe to rely on the system’s timezone settings”问题
2015/10/08 PHP
php blowfish加密解密算法
2016/07/02 PHP
php 生成签名及验证签名详解
2016/10/26 PHP
详谈PHP中的密码安全性Password Hashing
2017/02/04 PHP
使用jquery与图片美化checkbox和radio控件的代码(打包下载)
2010/11/11 Javascript
jquery ui dialog ie8出现滚动条的解决方法
2010/12/06 Javascript
Javascript 面向对象(一)(共有方法,私有方法,特权方法)
2012/05/23 Javascript
jquery复选框全选/取消示例
2013/12/30 Javascript
js控制文本框只输入数字和小数点的方法
2015/03/10 Javascript
JavaScript保存并运算页面中数字类型变量的写法
2015/07/06 Javascript
Bootstrap Paginator分页插件与ajax相结合实现动态无刷新分页效果
2016/05/27 Javascript
Javascript中弹窗confirm与prompt的区别
2018/10/26 Javascript
vue-cli3中配置alias和打包加hash值操作
2020/09/04 Javascript
[03:10]2014DOTA2 TI马来劲旅Titan首战告捷目标只是8强
2014/07/10 DOTA
python中如何使用正则表达式的非贪婪模式示例
2017/10/09 Python
PyQt5 对图片进行缩放的实例
2019/06/18 Python
树莓派使用USB摄像头和motion实现监控
2019/06/22 Python
django foreignkey(外键)的实现
2019/07/29 Python
解决Mac下使用python的坑
2019/08/13 Python
django 配置阿里云OSS存储media文件的例子
2019/08/20 Python
Flask 上传自定义头像的实例详解
2020/01/09 Python
Ubuntu权限不足无法创建文件夹解决方案
2020/11/14 Python
咖啡为什么会有酸味?你喝到的咖啡為什麼是酸的?
2021/03/17 冲泡冲煮
Lulu Guinness露露·吉尼斯官网:红唇包
2019/02/03 全球购物
C#里面如何倒序排列一个数组的元素?
2013/06/21 面试题
企业统计员岗位职责
2013/12/13 职场文书
给女儿的表扬信
2014/01/18 职场文书
个人纪律作风整改措施思想汇报
2014/10/12 职场文书
新党章的学习心得体会
2014/11/07 职场文书
明星邀请函
2015/02/02 职场文书
公司清洁工岗位职责
2015/04/15 职场文书
工作证明书
2015/06/15 职场文书
Python基础之函数嵌套知识总结
2021/05/23 Python
LyScript实现绕过反调试保护的示例详解
2022/08/14 Python