PHP多变量指向同一引用的优缺点是什么
Admin 2022-06-01 群英技术资讯 530 次浏览
本文实例讲述了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等),两个变量赋值都是指向同一个内存地址,而且不用你特意去指定。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要介绍了详解no input file specified 三种解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
sleep()是PHP的内置函数。用来延迟给定的秒数来执行程序。该函数只接受一个参数,必须传输该参数。$seconds参数表示以秒为单位的延迟时间。
TP3.2框架本文实例讲述了TP3.2框架分页相关实现方法。分享给大家供大家参考,下文的讲解详细,步骤过程清晰,对大家进一步学习和理解相关知识有一定的帮助。
这篇文章主要为大家介绍了利用PHP+HTML制作一个个人博客网站,文中的示例代码讲解详细,感兴趣的小伙伴快跟随小编一起了解一下
swoole客户端提供了TCP/UDP socket的客户端的封装代码,使用时仅需new Swoole\Client即可。除了普通的同步阻塞+select的使用方法外,Client还支持异步非阻塞回调。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008