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 相关文章推荐
Excel数据导入Mysql数据库的实现代码
Jun 05 PHP
深入eAccelerator与memcached的区别详解
Jun 06 PHP
关于ob_get_contents(),ob_end_clean(),ob_start(),的具体用法详解
Jun 24 PHP
linux下编译安装memcached服务
Aug 03 PHP
PHP中使用hidef扩展代替define提高性能
Apr 09 PHP
PHP实现即时输出、实时输出内容方法
May 27 PHP
WordPress中&quot;无法将上传的文件移动至&quot;错误的解决方法
Jul 01 PHP
PHP实现的简单缓存类
Jul 29 PHP
PHP实现生成带背景的图形验证码功能
Oct 03 PHP
CI框架中类的自动加载问题分析
Nov 21 PHP
php读取本地json文件的实例
Mar 07 PHP
laravel添加前台跳转成功页面示例
Oct 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
用PHP编程语言开发动态WAP页面
2006/10/09 PHP
zend framework配置操作数据库实例分析
2012/12/06 PHP
php绘图中显示不出图片的原因及解决
2014/03/05 PHP
PHP结合Jquery和ajax实现瀑布流特效
2016/01/07 PHP
php如何利用pecl安装mongodb扩展详解
2019/01/09 PHP
Yii 框架控制器创建使用及控制器响应操作示例
2019/10/14 PHP
JS小框架 fly javascript framework
2009/11/26 Javascript
关于js datetime的那点事
2011/11/15 Javascript
实现checkbox全选、反选、取消JavaScript小脚本异常
2014/04/10 Javascript
javascript实现日期按月份加减
2015/05/15 Javascript
jquery实现LED广告牌旋转系统图片切换效果代码分享
2015/08/26 Javascript
跟我学习javascript的基本类型和引用类型
2015/11/16 Javascript
jQuery form插件之ajaxForm()和ajaxSubmit()的可选参数项对象
2016/01/23 Javascript
JavaScript类的写法
2016/09/17 Javascript
Bootstrap3 图片(响应式图片&amp;图片形状)
2017/01/04 Javascript
微信小程序 页面跳转事件绑定的实例详解
2017/09/20 Javascript
Nodejs 和 Electron ubuntu下快速安装过程
2018/05/04 NodeJs
浅谈Vue路由快照实现思路及其问题
2018/06/07 Javascript
axios使用拦截器统一处理所有的http请求的方法
2018/11/02 Javascript
详解VUE中的插值( Interpolation)语法
2020/10/18 Javascript
vue移动端下拉刷新和上滑加载
2020/10/27 Javascript
[47:52]DOTA2-DPC中国联赛正赛 iG vs LBZS BO3 第二场 3月4日
2021/03/11 DOTA
python使用datetime模块计算各种时间间隔的方法
2015/03/24 Python
在Django中使用Sitemap的方法讲解
2015/07/22 Python
利用python生成一个导出数据库的bat脚本文件的方法
2016/12/30 Python
Python编程修改MP3文件名称的方法
2017/04/19 Python
Windows下安装Scrapy
2018/10/17 Python
python实现杨氏矩阵查找
2019/03/02 Python
利用python在大量数据文件下删除某一行的例子
2019/08/21 Python
python解释器安装教程的方法步骤
2020/07/02 Python
python切片作为占位符使用实例讲解
2021/02/17 Python
一份报关员的职业规划范文
2014/01/08 职场文书
简历上的自我评价怎么写
2014/01/28 职场文书
文明市民先进事迹
2014/05/15 职场文书
党的作风建设心得体会
2014/10/22 职场文书
2015年体育教学工作总结
2015/05/20 职场文书