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通用检测函数集合
Nov 25 PHP
mysql建立外键
Nov 25 PHP
PHP开发者常犯的10个MySQL错误更正剖析
Jan 30 PHP
php缩小png图片不损失透明色的解决方法
Dec 25 PHP
php使用多个进程同时控制文件读写示例
Feb 28 PHP
php文件缓存类汇总
Nov 21 PHP
js基于qrcode.js生成二维码的方法【附demo插件源码下载】
Dec 28 PHP
基于Codeigniter框架实现的student信息系统站点动态发布功能详解
Mar 23 PHP
ThinkPHP 3使用OSS的方法
Jul 19 PHP
PHP扩展mcrypt实现的AES加密功能示例
Jan 29 PHP
PHP设计模式之 策略模式Strategy详解【对象行为型】
May 01 PHP
PHP实现计算器小功能
Aug 28 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好代码风格的阶段性总结
2016/06/25 PHP
php四种定界符详解
2017/02/16 PHP
js继承的实现代码
2010/08/05 Javascript
jquery上传插件fineuploader上传文件使用方法(jquery图片上传插件)
2013/12/05 Javascript
jQuery中die()方法用法实例
2015/01/19 Javascript
JavaScript设计模式之工厂模式和构造器模式
2015/02/11 Javascript
javascript中indexOf技术详解
2015/05/07 Javascript
jquery的幻灯片图片切换效果代码分享
2015/09/07 Javascript
JQuery ztree 异步加载实例讲解
2016/02/25 Javascript
vue.js实现刷新当前页面的方法教程
2017/07/05 Javascript
vue中v-model动态生成的实例详解
2017/10/27 Javascript
JS forEach跳出循环2种实现方法
2020/06/24 Javascript
Nuxt的动态路由和参数校验操作
2020/11/09 Javascript
[38:44]DOTA2上海特级锦标赛A组小组赛#2 Secret VS CDEC第二局
2016/02/25 DOTA
python解析xml模块封装代码
2014/02/07 Python
Django查找网站项目根目录和对正则表达式的支持
2015/07/15 Python
Python 探针的实现原理
2016/04/23 Python
基于Python函数的作用域规则和闭包(详解)
2017/11/29 Python
浅谈django rest jwt vue 跨域问题
2018/10/26 Python
PyQt打开保存对话框的方法和使用详解
2019/02/27 Python
python中for循环把字符串或者字典添加到列表的方法
2019/07/20 Python
pytorch 获取层权重,对特定层注入hook, 提取中间层输出的方法
2019/08/17 Python
python 导入数据及作图的实现
2019/12/03 Python
python+gdal+遥感图像拼接(mosaic)的实例
2020/03/10 Python
matplotlib 生成的图像中无法显示中文字符的解决方法
2020/06/10 Python
纽约21世纪百货官网:Century 21
2016/08/27 全球购物
Scotch Porter官方网站:男士美容产品
2020/08/31 全球购物
C#面试题问题集
2016/04/02 面试题
计算机专业个人求职自荐信
2013/09/21 职场文书
大学生学习党课思想汇报
2014/01/03 职场文书
表扬信格式
2014/01/12 职场文书
创业女性典型材料
2014/05/02 职场文书
财会专业毕业生自荐信
2014/07/09 职场文书
简易版租房协议书范本
2014/10/13 职场文书
期中考试复习计划
2015/01/19 职场文书
导游词欢迎词
2015/02/02 职场文书