服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|JavaScript|易语言|

服务器之家 - 编程语言 - PHP教程 - php 多个变量指向同一个引用($b = &$a)用法分析

php 多个变量指向同一个引用($b = &$a)用法分析

2021-09-16 16:13倾听岁月 PHP教程

这篇文章主要介绍了php 多个变量指向同一个引用($b = &$a)用法,结合实例形式分析了PHP变量引用原理、优缺点及相关操作技巧,需要的朋友可以参考下

本文实例讲述了php 多个变量指向同一个引用($b = &$a)用法。分享给大家供大家参考,具体如下:

引用是什么?
引用就是多个变量指向同一个内存区域地址。如我们经常用的实例一个类,就是内存中开辟了一个区域存储实例的类,实例赋值给变量就是让这个变量指向这个内存区域。

多个变量指向同一个引用有什么好处?
节约了内存空间,多个变量指向同一个内存地址,在调用的时候多个变量都是指向的同一个内存地址。

多个变量指向同一个引用的缺点
要注意使用安全,即是由于多个变量都是指向的同一个内存地址,其中一个变量更改了某个属性,其它的变量调用的时候都是用的已经更改的实例。

在php 中我们为一个变量赋值的时候会在内存中开辟一个区域存储该值。那么我们将这个变量赋值给另一个变量的时候会在内存中重新开辟一个区域去存储改值吗? 我做了如下实验

?
1
2
3
4
5
6
7
8
9
10
11
12
<?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 都指向一个引用呢? 查了下资料 如下方法 让两个变量指向同一个内存地址

?
1
2
3
4
5
6
7
8
9
10
11
12
<?php
$a = "123";
$b = &$a;
echo $b."<br />";
$a = "456";
echo $b;
/**
 * 运行结果如下
 * 123
 * 456
 */
?>

我更改了一下变量的名字。方便测试发现区别。在这里我们可以看到 $b=&$a 其中&符号的作用就是让$b 指向的是$a的内存区域,而不是重新开辟一个区域。所以当更改$a的值的时候$b也会随着变化。

前面我们实验的对象是基本字符串,现在我们来看下类是否遵从这个规则

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?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程序设计有所帮助。

原文链接:https://blog.csdn.net/u014559227/article/details/72843020

延伸 · 阅读

精彩推荐
  • PHP教程ThinkPHP框架实现的MySQL数据库备份功能示例

    ThinkPHP框架实现的MySQL数据库备份功能示例

    这篇文章主要介绍了ThinkPHP框架实现的MySQL数据库备份功能,结合实例形式分析了thinkPHP导出mysql数据库相关操作实现与使用技巧,需要的朋友可以参考下 ...

    bywayboy3662019-10-06
  • PHP教程介绍一些PHP判断变量的函数

    介绍一些PHP判断变量的函数

    与其他语言不同,PHP不是一种严格的类型语言。基本上,这意味着开发者在使用一个变量前,不必明确地设定这个变量的类型(数字、字符串、布尔值)。...

    PHP教程网2272019-12-30
  • PHP教程PHP7引入的"??"和"?:"的区别讲解

    PHP7引入的"??"和"?:"的区别讲解

    今天小编就为大家分享一篇关于PHP7引入的"??"和"?:"的区别讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编...

    空蒙风_宇5972021-07-30
  • PHP教程Symfony2学习笔记之模板用法详解

    Symfony2学习笔记之模板用法详解

    这篇文章主要介绍了Symfony2学习笔记之模板用法,结合实例形式详细分析了Symfony常用的模板使用方法与相关技巧,需要的朋友可以参考下...

    Seekr4052020-12-30
  • PHP教程PHP中读取文件的几个方法总结(推荐)

    PHP中读取文件的几个方法总结(推荐)

    下面小编就为大家带来一篇PHP中读取文件的几个方法总结(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    PHP教程网8622021-01-25
  • PHP教程php常用字符串查找函数strstr()与strpos()实例分析

    php常用字符串查找函数strstr()与strpos()实例分析

    这篇文章主要介绍了php常用字符串查找函数strstr()与strpos(),结合具体实例形式分析了php字符串查找函数strstr()与strpos()的具体功能、用法、区别及相关操作注...

    金三国5802021-08-05
  • PHP教程PHP响应post请求上传文件的方法

    PHP响应post请求上传文件的方法

    这篇文章主要介绍了PHP响应post请求上传文件的方法,涉及php针对post传输数据处理的相关技巧,需要的朋友可以参考下...

    龙鱼鹿5192020-12-08
  • PHP教程php在linux下检测mysql同步状态的方法

    php在linux下检测mysql同步状态的方法

    这篇文章主要介绍了php在linux下检测mysql同步状态的方法,是Linux下使用php检测mysql同步状态的实用技巧,具有一定参考借鉴价值,需要的朋友可以参考下...

    PHP中文网1692020-08-29