2011-12-02 28 views
1

修訂 - 我有多個類定義分散在文件(每個文件一個類)。我想要做的是這個;我有一個叫Master的類,它創建了一個實例,而Master對象創建了我定義類的其餘部分的實例。 Master已將其所有屬性定義在其中。PHP類屬性/方法同步

在這種Master創建的情況下,我希望能夠用Master的屬性/方法直接從$this$this->methodInMaster,而不需要通過Master的對象到新的實例,其存儲和調用$this->MasterInstance->methodinMaster 。有什麼辦法可以做到這一點?

extends關鍵字在這裏根本沒有幫助; Master創建實例的類將繼承Master的屬性和方法,但是這些實例對Master的屬性所做的任何更改都不會在Master對象中「保存」,而只是進行更改的對象。換句話說,這些變化在任何其他類中都是不可見的。

我相信這是一個限制,不使事情靜態,以便沒有'實例',但是有沒有辦法使用call, setget魔法方法來解決所有這些問題?

+0

您是否證實過這種情況?它違背了繼承的整個想法。 – Viruzzo

+0

我不確定你想要實現什麼,但是從類擴展只擴展方法和字段而不是對象的實例。也許你應該嘗試一些設計模式鏈接代理或工廠? –

+0

Viruzzo這是PHP的行爲,我也不明白。基本上我想要做的是我有很多類分散在多個文件。我將大部分屬性放在一個類中,我希望能夠通過'$ this-> property'在其他類中訪問它們,而無需引用實例。 '__get(),__set()和__call'似乎是要走的路(?),但我無法想出一個辦法。 – Blake

回答

1

擴展,因爲它不是不幫你,你所需要的:如果你想有一個單一的對象,很多情況下是可訪問的,你想要一個Singleton(它是靜態的,因爲另一種是有一些不切實際共享單一參考的形式)。對於你想要的結構,你將需要一個來自Master類的不同的Singleton,但它可以訪問它。基本上你工作流程將是:

  • 在單身實現你的功能
  • 訪問辛格爾頓法師的方法
  • 子類中的每一個電話推廣碩士專業照常

這樣一來會被透明地「重定向」到對單身人士的呼叫。這樣做不是很優雅(而不是直接訪問子類中的單例),但它應該適用於您的設計。