PHP中($b = &$a)的用法是什么,使用有何优缺点
Admin 2022-06-29 群英技术资讯 1091 次浏览
这篇文章给大家分享的是PHP中($b = &$a)的用法是什么,使用有何优缺点。小编觉得挺实用的,因此分享给大家做个参考,文中的介绍得很详细,而要易于理解和学习,有需要的朋友可以参考,接下来就跟随小编一起了解看看吧。本文实例讲述了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进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
在PHP中,没有任何变量指向这个对象时,这个对象就成为垃圾。PHP会将其在内存中销毁;这是PHP的GC垃圾处理机制,防止内存溢出。
在thinkphp中,fetch方法用于渲染模板文件输出,该方法不会直接渲染输出,而是支持模板或者内容的标签解析,返回解析后的内容,渲染输出系统也会自动调用send方法进行渲染输出,语法为“$this->fetch(模板名称);”。
下面由phpstorm教程栏目给大家介绍phpstorm设置内存限制后打不开的问题,希望对需要的朋友有所帮助!
CodeIgniter 是一个基于 MVC框架 的PHP轻量级框架(开源),它的目标是让你能够更快速的开发,它提供了日常任务中所需的大量类库,以及简单的接口和逻辑结构。通过减少代码量,CodeIgniter 让你更加专注于你的创造性工作。
PHP 中除了已经给我们提供了很多功能强大的系统函数,但这远远满足不了需要,程序员可以根据开发的需要来创建一个自定义函数。函数是通过调用函数来执行的!
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008