2

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

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

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

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

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

4

1 回答 1

2

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

于 2011-05-10T21:22:28.400 回答