2012-02-15 27 views
0

私は通常のクラスを拡張するシングルトンクラスを持っています。 (Class1)静的子クラスで非静的関数を呼び出すPHP

通常のクラスには、set()とget()という2つの非静的関数があります。 (Class2)

シングルトン(Class1)インスタンスを取得する第3のクラス(Class3)は、シングルトンを通じてset()およびget()を使用します。 Class3を使ってうまく動作しますが、親クラスのシングルトン内でget()メソッドを使用して、 "第3"クラスが何を設定しているかを確認する方法はありますか?

静的ではないため、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

コードスニペットを投稿してください。 –

+2

これが混乱しているかどうかをあなたにお知らせください。ややこしい。 – Marvo

+0

大丈夫です、コードスニペットを投稿しました:) – volk

答えて

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

+0

これはかなり良いですが、唯一の問題は、ちょうど取得し、設定するよりもはるかに多くの機能があることです。 – volk

+0

あなたが「すべてをシングルトンで実装する」ではない場合、シングルトンはclass3の単一インスタンスを表します。つまり、すべてのパブリックメンバー変数にアクセスでき、クラス3を拡張した場合と同じように機能します。 –

0

私はちょうど自分の質問を解決しました、遅く返事を申し訳ありません。

私はシングルトンにしなければならなかったすべてのコールのget(だった)この方法:

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

別のクラスに対して同じことをする場合は、名前空間の衝突で終わることに注意してください。ありがとうございます。 –

+0

これについてもう少し説明できますか? – volk

+0

class2でも同じことをしたいのですが?これで、名前空間の衝突によりエラーが発生する、Singletonという名前の2つのクラスが作成されます。将来的にこの問題を回避できるように、私の解決方法をお勧めします。 –

関連する問題