PHP clone 复制对象 优化对象创建速度

用 clone 结构来复制一个对象。

PHP 的对象赋值,默认是引用传递。

如果需要一个对象的副本,只能用 clone。

从性能上考虑,当在一个循环中需要反复创建一个新对象的时候,可以考虑在外层创建,在循环内层用 clone 来复制对象。这样性能将会得到很大提高。

这里有实地测试的代码和测试结果可以参考:

<<PHP 对象克隆 性能优化示例>>

引用一下结论:

仅仅是这么简单的一个对象,创建与克隆,性能差距就达到5至6倍,时间消耗已经不在一个数量级上了。

Tags: ,

2 comments

  1. 我分别对循环1000,10000,100000次clone和new做了多次测试,都是new的速度比clone的速度快,请问Leakon,你是否有关于的clone的官方的说法?

  2. 行后,会对比2中创建对象所消耗的时间记录。

    可以看到,new的方式比clone要多花费5倍左右的时间。

    之前的服务器出问题,wiki数据丢了,链接失效,我又重新加到googlecode上了:

    http://leakon.googlecode.com/svn/trunk/leakon/php/clone_performance/clone_performance.php

    这里面写了一个简单的类定义,包含构造函数、一些方法和属性。

    执行后,会对比2中创建对象所消耗的时间记录。

    可以看到,new的方式比clone要多花费5倍左右的时间。

    不知道你的类定义是什么样,如果是一个空类,也许差别不大。

    注:用于计时的sfTimer类在同级别的目录下。

    如果方便,请把你测试的例子共享出来看看,我认为new不应该比clone更快。

Leave a Reply

Your email address will not be published.

*