就地用其他对象替换对象


Replace objects by other objects in-place

假设我想构建一个数据库抽象层,它使用延迟加载机制。

如果我要求层加载根对象,它会加载其外部表示并构造自身。

然后,它以某种方式识别某些链接对象存在。由于预先加载所有内容的成本可能很高,因此它为相关对象建立了代理。这样的代理应该能够四处传递。

如果在此类代理上调用第一条消息,它将加载其外部表示并构造自身。由于对代理的引用可能已传递,因此创建的对象需要就地替换现有的代理对象。

我可以在 PHP 中就地将一个对象替换为另一个对象吗?

我不相信一个对象有可能用另一个对象替换对自身的所有引用。相反,请让代理对象使用重载转发属性访问和方法调用。在基本代理对象上实现代理(例如,命名为 OOProxy ),然后将其扩展到延迟加载代理对象的 LazyProxy 类。只要不需要检查对象的类型,任何引用代理的内容都无法将其与代理区分开来。