假設我想構建一個使用延遲加載機制的數據庫抽象層。用其他對象就地替換對象
如果我要求圖層加載一個根對象,它會加載它的外部表示並構造它自己。
然後它以某種方式確定存在某些鏈接的對象。由於加載所有前期代碼可能代價高昂,因此它會爲相關對象建立代理。這樣的代理應該能夠通過。
如果在這樣的代理上調用第一個消息,它將加載其外部表示並構造它自己。由於對代理的引用可能已被傳遞,所創建的對象需要替換現有的代理對象。
我能在原地用PHP中的另一個對象替換對象嗎?
假設我想構建一個使用延遲加載機制的數據庫抽象層。用其他對象就地替換對象
如果我要求圖層加載一個根對象,它會加載它的外部表示並構造它自己。
然後它以某種方式確定存在某些鏈接的對象。由於加載所有前期代碼可能代價高昂,因此它會爲相關對象建立代理。這樣的代理應該能夠通過。
如果在這樣的代理上調用第一個消息,它將加載其外部表示並構造它自己。由於對代理的引用可能已被傳遞,所創建的對象需要替換現有的代理對象。
我能在原地用PHP中的另一個對象替換對象嗎?
我不相信一個對象可以用另一個對象替換所有對自身的引用。相反,使用overloading讓代理對象轉發屬性訪問和方法調用。在基本代理對象(名爲OOProxy
)上實現代理,然後將其擴展爲延遲加載代理對象的LazyProxy
類。只要您不需要檢查對象的類型,那麼對代理引用的任何內容都將無法將其與代理進行區分。
請給出幾個示例代碼片段。替換'$ this = new obj'是不可能的,但是它聽起來像是真正的'&'相關對象的引用可能只適用於一次。但是通用代理/攔截對象也是一個選項,具體取決於複雜性。 – mario 2011-05-10 21:17:53
我想知道,這可能不是一個解決方案 - 因爲PHP中的引用不是可以找到的引用,例如我可能會在明天添加代碼。今天太遲了。 – SteAp 2011-05-10 22:11:08