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 相关文章推荐
投票管理程序
Oct 09 PHP
php+mysql写的简单留言本实例代码
Jul 25 PHP
Warning: session_destroy() : Trying to destroy uninitialized sessionq错误
Jun 16 PHP
php的chr和ord函数实现字符加减乘除运算实现代码
Dec 05 PHP
php安全之直接用$获取值而不$_GET 字符转义
Jun 03 PHP
php实现删除空目录的方法
Mar 16 PHP
PHP递归调用数组值并用其执行指定函数的方法
Apr 01 PHP
PHP获取Exif缩略图的方法
Jul 13 PHP
Zend Framework实现将session存储在memcache中的方法
Mar 22 PHP
示例详解Laravel的注册重构
Aug 14 PHP
详解PHP发送邮件知识点
May 06 PHP
Laravel框架控制器,视图及模型操作图文详解
Dec 04 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
PL-880隐藏功能
2021/03/01 无线电
php内嵌函数用法实例
2015/03/20 PHP
php+mysql+jquery实现简易的检索自动补全提示功能
2017/04/15 PHP
PHP实现的自定义图像居中裁剪函数示例【测试可用】
2017/08/11 PHP
Laravel 前端资源配置教程
2019/10/18 PHP
Javascript的一种模块模式
2008/03/22 Javascript
纯js实现的论坛常用的运行代码的效果
2008/07/15 Javascript
ExtJS下grid的一些属性说明
2009/12/13 Javascript
简单漂亮的js弹窗可自由拖拽且兼容大部分浏览器
2013/10/22 Javascript
Tab切换组件(选项卡功能)实例代码
2013/11/21 Javascript
javascript事件委托的用法及其好处简析
2016/04/04 Javascript
Node.js中如何合并两个复杂对象详解
2016/12/31 Javascript
JS正则匹配中文的方法示例
2017/01/06 Javascript
JS回调函数简单用法示例
2017/02/09 Javascript
socket.io学习教程之基本应用(二)
2017/04/29 Javascript
ES6正则表达式的一些新功能总结
2017/05/09 Javascript
原生JS实现小小的音乐播放器
2017/10/16 Javascript
vue Tab切换以及缓存页面处理的几种方式
2019/11/05 Javascript
基于vue-cli3+typescript的tsx开发模板搭建过程分享
2020/02/28 Javascript
js实现简单音乐播放器
2020/06/30 Javascript
electron踩坑之dialog中的callback解决
2020/10/06 Javascript
[01:15]《辉夜杯》北京网鱼队巡礼
2015/10/26 DOTA
python在windows下实现备份程序实例
2014/07/04 Python
python爬取51job中hr的邮箱
2016/05/14 Python
python函数的5种参数详解
2017/02/24 Python
python实现按长宽比缩放图片
2018/06/07 Python
Python使用jsonpath-rw模块处理Json对象操作示例
2018/07/31 Python
python实现二分类的卡方分箱示例
2019/11/22 Python
Python netmiko模块的使用
2020/02/14 Python
JD Sports丹麦:英国领先的运动时尚零售商
2020/11/24 全球购物
珍珠鸟教学反思
2014/02/01 职场文书
数控专业个人求职信范文
2014/02/05 职场文书
社会实践的活动方案
2014/08/22 职场文书
餐厅服务员岗位职责
2015/02/09 职场文书
暂住证明怎么写
2015/06/19 职场文书
python本地文件服务器实例教程
2021/05/02 Python