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通用查询程序
Mar 11 PHP
php mysql数据库操作类
Jun 04 PHP
php 连接mysql连接被重置的解决方法
Feb 15 PHP
php中一个完整表单处理实现代码
Nov 10 PHP
php获取用户浏览器版本的方法
Jan 03 PHP
PHP使用mysql_fetch_object从查询结果中获取对象集的方法
Mar 18 PHP
PHP编写RESTful接口的方法
Feb 21 PHP
解析PHP的Yii框架中cookie和session功能的相关操作
Mar 17 PHP
PHP实现查询手机归属地的方法详解
Apr 28 PHP
一文掌握PHP Xdebug 本地与远程调试(小结)
Apr 23 PHP
thinkPHP事务操作简单案例分析
Oct 17 PHP
PHP常用函数之根据生日计算年龄功能示例
Oct 21 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集成环境xampp中apache无法启动问题解决方案
2014/11/18 PHP
thinkphp模板继承实例简述
2014/11/26 PHP
PHP-FPM运行状态的实时查看及监控详解
2016/11/18 PHP
JS实现兼容性较好的随屏滚动效果
2015/11/09 Javascript
JavaScript表单验证实例之验证表单项是否为空
2016/01/10 Javascript
基于jQuery实现的查看全文功能【实用】
2016/12/11 Javascript
Javascript继承机制详解
2017/05/30 Javascript
推荐10款扩展Web表单的JS插件
2017/12/25 Javascript
vue的全局提示框组件实例代码
2018/02/26 Javascript
纯js封装的ajax功能函数与用法示例
2018/05/14 Javascript
Angular 2使用路由自定义弹出组件toast操作示例
2019/05/10 Javascript
jQuery模拟html下拉多选框的原生实现方法示例
2019/05/30 jQuery
react+redux仿微信聊天界面
2019/06/21 Javascript
JavaScript中变量提升机制示例详解
2019/12/27 Javascript
AutoJs实现刷宝短视频的思路详解
2020/05/22 Javascript
[01:22:28]DOTA2-DPC中国联赛 正赛 SAG vs RNG BO3 第一场 1月18日
2021/03/11 DOTA
[05:09]DOTA2-DPC中国联赛2月22日Recap集锦
2021/03/11 DOTA
Python中生成器和yield语句的用法详解
2015/04/17 Python
python中 chr unichr ord函数的实例详解
2017/08/06 Python
python实现朴素贝叶斯分类器
2018/03/28 Python
PythonWeb项目Django部署在Ubuntu18.04腾讯云主机上
2019/04/01 Python
python整合ffmpeg实现视频文件的批量转换
2019/05/31 Python
对Django的restful用法详解(自带的增删改查)
2019/08/28 Python
python程序中的线程操作 concurrent模块使用详解
2019/09/23 Python
Python中filter与lambda的结合使用详解
2019/12/24 Python
10个python爬虫入门实例(小结)
2020/11/01 Python
Python爬虫之Selenium实现键盘事件
2020/12/04 Python
详解CSS3中常用的样式【基本文本和字体样式】
2020/10/20 HTML / CSS
canvas线条的属性详解
2018/03/27 HTML / CSS
Qoo10台湾站:亚洲领先的在线市场
2018/05/15 全球购物
Clarks西班牙官方在线商店:clarks鞋
2019/05/03 全球购物
法律专业求职信
2014/05/24 职场文书
学习焦裕禄同志为人民服务思想汇报
2014/09/10 职场文书
mysql的数据压缩性能对比详情
2021/11/07 MySQL
Pyhton爬虫知识之正则表达式详解
2022/04/01 Python
vue.js 使用原生js实现轮播图
2022/04/26 Vue.js