假设我想构建一个使用延迟加载机制的数据库抽象层。
如果我要求图层加载根对象,它会加载其外部表示并构造自身。
然后以某种方式识别某些链接对象存在。由于加载所有前期可能成本很高,因此它为相关对象建立了代理。这些代理应该能够传播。
如果在这样的代理上调用第一条消息,它将加载其外部表示并构造自身。由于可能已传递对代理的引用,因此创建的对象需要就地替换现有的代理对象。
我可以在PHP中使用其他对象替换对象吗?
答案 0 :(得分:2)
我不相信对象可以用另一个对象替换对自身的所有引用。相反,让您的代理对象使用overloading转发属性访问和方法调用。在基础代理对象(名为OOProxy
)上实现代理,然后将其扩展为懒惰加载代理对象的LazyProxy
类。只要您不需要检查对象的类型,任何引用代理的内容都无法将其与代理区分开来。