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动态生成虚拟现实VRML网页
Oct 09 PHP
php数组函数序列之end() - 移动数组内部指针到最后一个元素,并返回该元素的值
Oct 31 PHP
探讨Smarty中如何获取数组的长度以及smarty调用php函数的详解
Jun 20 PHP
PHP实现CSV文件的导入和导出类
Mar 24 PHP
php 参数过滤、数据过滤详解
Oct 26 PHP
php对文件夹进行相关操作(遍历、计算大小)
Nov 04 PHP
php实现有序数组打印或排序的方法【附Python、C及Go语言实现代码】
Nov 10 PHP
PHP实现截取中文字符串不出现?号的解决方法
Dec 29 PHP
PHP输出XML格式数据的方法总结
Feb 08 PHP
分享5个非常有用的Laravel Blade指令
May 30 PHP
PHP7导出Excel报ERR_EMPTY_RESPONSE解决方法
Apr 16 PHP
解决在laravel中leftjoin带条件查询没有返回右表为NULL的问题
Oct 15 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
mysql+php分页类(已测)
2008/03/31 PHP
浅析ThinkPHP中的pathinfo模式和URL重写
2014/01/06 PHP
又一个PHP实现的冒泡排序算法分享
2014/08/21 PHP
php微信公众平台开发类实例
2015/04/01 PHP
php版微信公众平台开发之验证步骤实例详解
2016/09/23 PHP
javascript中自定义对象的属性方法分享
2013/07/12 Javascript
JQuery的ready函数与JS的onload的区别详解
2013/11/21 Javascript
node.js中的path.isAbsolute方法使用说明
2014/12/08 Javascript
Javascript对象Clone实例分析
2015/06/09 Javascript
AngularJS 表达式详解及实例代码
2016/09/14 Javascript
微信小程序 触控事件详细介绍
2016/10/17 Javascript
jQuery网页定位导航特效实现方法
2016/12/19 Javascript
详解handlebars+require基本使用方法
2016/12/21 Javascript
JavaScript Date 知识浅析
2017/01/29 Javascript
Vue 组件间的样式冲突污染
2017/08/31 Javascript
为什么使用koa2搭建微信第三方公众平台的原因
2018/05/16 Javascript
微信小程序地图(map)组件点击(tap)获取经纬度的方法
2019/01/10 Javascript
Vue.js样式动态绑定实现小结
2019/01/24 Javascript
基于Vue.js与WordPress Rest API构建单页应用详解
2019/09/16 Javascript
JS+CSS实现随机点名(实例代码)
2019/11/04 Javascript
[04:05]TI9战队采访 - Natus Vincere
2019/08/22 DOTA
Python自动化运维_文件内容差异对比分析
2017/12/13 Python
python实现石头剪刀布小游戏
2021/01/20 Python
python调用c++ ctype list传数组或者返回数组的方法
2019/02/13 Python
详解如何用python实现一个简单下载器的服务端和客户端
2019/10/28 Python
Python configparser模块应用过程解析
2020/08/14 Python
html5+svg学习指南之SVG基础知识
2014/12/17 HTML / CSS
俄罗斯电动工具和设备购物网站:Vseinstrumenti.ru
2020/11/12 全球购物
写好自荐信的几个要点
2013/12/26 职场文书
怎样拟定创业计划书
2014/05/01 职场文书
关于学习的演讲稿
2014/05/10 职场文书
幼儿园国庆节活动总结
2015/03/23 职场文书
居委会工作总结2015
2015/05/18 职场文书
欠条范文
2015/07/03 职场文书
MySQL Router实现MySQL的读写分离的方法
2021/05/27 MySQL
python中Pyqt5使用Qlabel标签播放视频
2022/04/22 Python