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