【发布时间】:2013-02-01 06:13:36
【问题描述】:
我想知道如何克隆一个包含对象的扩展类 SplHeap。例如,如果 FooHeap 扩展了 SplHeap,那么 FooHeap 是否可以有一个 __clone 方法并克隆它的对象元素?
class FooHeap extends SplHeap{
public function compare($value1, $value2){.... }
public function __clone(){
// how do I access its elements to clone?
}
}
或者,如果我必须创建一个新的 FooHeap 对象并重新插入对象元素的克隆,有没有一种方法(例如从上到下,或从下到上)我应该重新插入克隆的确保优化性能的元素?
【问题讨论】:
-
听起来您想要堆的深层副本(参见浅层副本,其中堆的对象在每个堆中都是一个且相同的)。对吗?
-
是的,我想要堆的深层副本。有什么办法可以得到吗?
-
我可能只是在堆上循环(在
__clone()内),将克隆的对象临时存储在某处(SplObjectStorage、SplFixedArray等)。一旦第一个循环完成,堆将是空的,此时你可以循环临时存储和insert()克隆的对象。