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

作者:倾听岁月 时间:2023-11-02 23:28:11 

本文实例讲述了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程序设计有所帮助。

来源:https://blog.csdn.net/u014559227/article/details/72843020

标签:php,变量,引用
0
投稿

猜你喜欢

  • 教你如何利用python3爬虫爬取漫画岛-非人哉漫画

    2021-10-01 23:06:57
  • 从Pytorch模型pth文件中读取参数成numpy矩阵的操作

    2021-12-27 11:05:53
  • python中引用与复制用法实例分析

    2022-09-04 09:54:35
  • PHP实现web socket长链接流程详解

    2023-05-27 23:44:39
  • OpenCV实现去除背景识别的方法总结

    2021-01-06 23:04:10
  • Python开发毕设案例之桌面学生信息管理程序

    2021-03-02 14:56:08
  • 详解在Anaconda环境下Python安装pydot与graphviz的方法

    2021-01-27 23:24:24
  • Python的SimpleHTTPServer模块用处及使用方法简介

    2023-05-11 06:04:51
  • asp.net+FCKeditor上传图片显示叉叉图片无法显示的问题的解决方法

    2022-05-19 17:08:22
  • openCV入门学习基础教程第三篇

    2022-05-20 00:00:59
  • Linux安装Python3.8.1的教程详解

    2022-03-26 10:43:24
  • 像线程一样管理进程的Python multiprocessing库

    2023-06-01 15:37:39
  • python简单图片操作:打开\\显示\\保存图像方法介绍

    2021-03-29 15:52:28
  • 详解selenium + chromedriver 被反爬的解决方法

    2022-03-20 18:40:46
  • Python线性表种的单链表详解

    2022-03-02 07:36:58
  • Python根据区号生成手机号码的方法

    2022-02-20 21:58:29
  • 使用 python pyautogui实现鼠标键盘控制功能

    2023-11-17 07:01:41
  • 解决go build不去vendor下查找包的问题

    2024-02-04 10:17:25
  • 用Python监控NASA TV直播画面的实现步骤

    2022-09-15 21:54:15
  • python新式类和经典类的区别实例分析

    2023-07-28 10:01:02
  • asp之家 网络编程 m.aspxhome.com