为了账号安全,请及时绑定邮箱和手机立即绑定

我对PHP变量引用、对象引用的理解

标签:
PHP

变量引用        

        我们可以知道在PHP中,变量以 $ 符号开头,其后是变量的名称。变量可以对一个内容进行引用,PHP 的引用允许你用两个变量来指向同一个内容 。

        示例代码如下:

123456<?php$a = 1;          $b $a;       echo '$a ='.$a.'; '.'$b = '.$b."\n".$b = 2;echo '$a ='.$a.'; '.'$b = '.$b."\n".

        输出结果:

12$a = 1;  $b = 1;$a = 1;  $b = 2;

        $a将值赋给了$b,拷贝一份右边的变量给b,会生成一份内存空间,结果可能是同样的内容在内存中两份。此时变量a与变量b同时指向同一个内容“1”,所以输出结果均为“1”。当“$b = 2”语句执行时,将变量b改成指向了内容“2”,原变量a并无影响,只是变量b的指向发生了改变,所以输出结果变量a无变化,变量b为“2”。

         下面来看另一种情况,示例代码如下:

123456<?php$c = 1;$d = &$c;echo '$c ='.$c.'; '.'$d = '.$d."\n".$d = 2;echo '$c ='.$c.'; '.'$d = '.$d."\n".

        输出结果:

12$c = 1;  $b = 1;$c = 2;  $b = 2;

    $c将值赋给了$d的时候,加上了“&”符号,符号"&"表示引用。使用引用,php引擎不会拷贝一份变量,其实就是将指针指向了$a在内存中的地址,$b中就是保存了这个指针。对它们中的任意一个进行修改都会影响到其他变量,而删除其中的一个变量,其他都会被作用到。


对象引用

        在说明对象的引用的时候,先插入一个概念(析构函数):析构函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行,释放对象所占用的内存。下面来看看示例代码:

    情况1:


<?phpclass A{    $name "Jam";$b new A(); $c $becho $b->name;echo $c->name;$b->name = "Bob"echo $c->name;$b = null ;$c = null ;    //此时调用析构函数?>

    输出结果:


Jam      Jam     Bob


     情况2:


<?phpclass A{    $name "Jam";$b new A(); $c = &$becho $b->name;echo $c->name;$b->name = "Bob"echo $c->name;$b = null ;    //此时调用析构函数?>

    输出结果:


Jam      Jam     Bob

        从情况1可以看出,$b 和 $c都可以调用函数A中的属性,它们当中某一方都可以对属性内容进行更改,在$b和$c都为空的时候,即没有变量在引用对象了,此时会调用析构函数。在情况2中,在变量赋值时加入了&符号,意为复制出一个$c等同与$b,两者为相等的关系。当其中一方为空时,另一方也会为空,此时调用析构函数。


        

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消