注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

技术行者

时代的车轮在按照摩尔定律滚动。

 
 
 

日志

 
 

PHP的类对象的赋值和clone的区别  

2012-04-19 11:20:00|  分类: PHP |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

1. 类对象的赋值方式

PHP的类的赋值方式,有3种情况,一种是$a = new class()操作,创建类;一种是普通的对象赋值$a = $b; 一种取地址的赋值方式$a = &$b。那么,这三种赋值,指向的内存是否是同一块呢?好吧,我们一起来做一个实验。

代码如下:

<?php

class mm {

    public $name = 'Peter';

}

$a = new mm();

echo $a->name,"\n";//输出为Peter

$b = $a; 

$c = &$a;

$b->name = "Anne";

echo $a->name,"\n",$b->name,"\n",$c->name,"\n";//都输出为Anne

?>

PHP的类对象的赋值和clone的区别 - hansionxu - 技术的天空

从输出结果,我们可以看出,他们三个$a/$b/$c都是指向同一个对象的,也就是同一块内存。

 

2. 类对象的clone的赋值方式

好吧,现在,我们一起来试试clone的赋值方式,看看他们是否指向同一块内存。

代码如下:

<?php

class mm {

    public $name = 'Peter';

}

$a = new mm();

$b = $a; 

$c = &$a;

$d = clone $a; 

$b->name = "Anne";

echo $a->name,"\n",$b->name,"\n",$c->name,"\n",$d->name;//输出为:Anne Anne Anne Peter

?>

PHP的类对象的赋值和clone的区别 - hansionxu - 技术的天空

从输出结果,可以看出,$d = clone $a;这个对象指向了单独的一块内存空间,所以,一直保留着原来的值Peter。

 

3. 小结:

在PHP5的类对象操作中,$a=$b和$a=&$b这种赋值方式,指向的是同一个对象,同一块内存空间;$a=clone $b这种赋值方式,则是指向另一个新的对象,另一个块新的内存空间。

  评论这张
 
阅读(379)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017