本文实例讲述了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
相关文章
- ASP.NET自助建站系统的域名绑定与解析教程 2025-06-10
- 个人服务器网站搭建:如何选择合适的服务器提供商? 2025-06-10
- ASP.NET自助建站系统中如何实现多语言支持? 2025-06-10
- 64M VPS建站:如何选择最适合的网站建设平台? 2025-06-10
- ASP.NET本地开发时常见的配置错误及解决方法? 2025-06-10
- 2025-07-10 怎样使用阿里云的安全工具进行服务器漏洞扫描和修复?
- 2025-07-10 怎样使用命令行工具优化Linux云服务器的Ping性能?
- 2025-07-10 怎样使用Xshell连接华为云服务器,实现高效远程管理?
- 2025-07-10 怎样利用云服务器D盘搭建稳定、高效的网站托管环境?
- 2025-07-10 怎样使用阿里云的安全组功能来增强服务器防火墙的安全性?
快网idc优惠网
QQ交流群
-
2025-05-29 55
-
2025-05-27 91
-
2025-05-25 17
-
2025-05-25 20
-
2025-05-27 39