2012-02-15 145 views
0

我有一個單例類,它擴展了一個普通的類。 (Class1)調用一個靜態子類中的非靜態函數php

正常類有兩個稱爲set()和get()的非靜態函數。 (Class2)

獲取單例(Class1's)實例的第三個類(Class3)通過單例使用set()和get()。它使用Class3可以正常工作,但有什麼方法可以在父類的單例中使用get()方法來查看「第三個」類設置的內容?

我似乎無法調用get,因爲它不是靜態的。請讓我知道這是否令人困惑。

class Class1 { 
    public function doThings(){ 
     $this->view->set("css","1234"); 
    } 
} 

class Singleton extends Class3 { 
     static public function instance() 
     { 
      if (!self::$_instance instanceof self) { 
      self::$_instance = new self(); 
      } 

      return self::$_instance; 
     } 
     //I want this singleton to call get("css") and have it return the value. 

} 


class Class3{ 
    public function get(arg){//implementation } 
    public function set(arg){//implementation } 
} 
+0

請張貼代碼片段。 – 2012-02-15 23:04:58

+2

您要求我們通知您這是否令人困惑。這很混亂。 – Marvo 2012-02-15 23:07:58

+0

好吧好吧,我發佈代碼片段:) – volk 2012-02-15 23:09:58

回答

2

我從來沒有見過特定的類只是爲了擴展它應該是一個單例的類的單例。相反,試試這個:

class Class3 
{ 
    private $_instance; 

    static public function instance() 
    { 
     if (!self::$_instance instanceof self) { 
      self::$_instance = new self(); 
     } 

     return self::$_instance; 
    } 

    public function get(arg){//implementation } 
    public function set(arg){//implementation } 
} 

// Calling code 
// I want this singleton to call get("css") and have it return the value. 

Class3::getInstance()->set('css', 'border:0'); 
Class3::getInstance()->get('css'); 
+0

這是更好的方法! – busypeoples 2012-02-15 23:29:41

+0

這是相當不錯的,唯一的問題是,有更多的功能比剛剛得到和設置,我不能只在單身人士,因此擴展實現它們。 – volk 2012-02-16 15:05:46

+0

你不是「在單例中實現它們」,單例表示一個單獨的class3實例,這意味着它可以訪問每個公共成員變量,並且它的功能就好像它擴展了class3一樣。 – 2012-02-16 16:15:33

0

我剛剛解決了我自己的問題,對於遲到的回覆抱歉。

所有我曾在單做的是調用get()這樣說:

self::instance()->get("css"); 
+0

要小心,如果你選擇爲另一個類做同樣的事情,你最終會遇到命名空間衝突。 – 2012-02-16 17:58:39

+0

謝謝。你能再解釋一下嗎? – volk 2012-02-16 18:08:04

+0

如果你想爲class2做同樣的事情怎麼辦?您現在將有兩個名爲Singleton的類,這會由於命名空間衝突而導致錯誤。我建議使用我的解決方案,以便將來避免此問題。感謝,這是有道理的 – 2012-02-16 19:13:33