2011-12-27 15 views
1

現在、メインクラスBaseは他のすべてのコントローラとモデルをロードしてから、Baseによってロードされる各クラスは同様の構造:

class SomeClass { 

    private $base; 

    function __construct(&$base) { 
     $this->base = $base; 
    } 

    function SomeMethod() { } 

} 

その後、別のクラスには、使用しなければならないでしょう:

class AnotherClass { 

    private $base; 

    function __construct(&$base) { 
     $this->base = $base; 

     $this->base->SomeClass->SomeMethod(); 
    } 

} 

は、これらの他のクラスにアクセスするためのより良い方法はありますか?

+0

SomeClassクラスを見て、BaseClassを拡張しましたか? –

+0

BaseClassの機能を拡張しません。それらは特定の目的のためにBaseClassによって呼び出されてロードされます。 など。 BaseClassはDatabaseClassとAuthenticationClassを呼び出し、次にAuthenticationClassとDatabaseClassを使用するControll SomeControllerを呼び出すことができます。 – jSherz

+0

申し訳ありませんが、元の質問を正しく理解していないように見えます。私の以前のコメントは無視してください。 –

答えて

1

おそらくのsomeMethod()は静的である可能性が:ちょうどその

class SomeClass { 

    private $base; 

    function __construct(&$base) { 
     $this->base = $base; 
    } 

    public static function SomeMethod() { } 

} 

そして:

class AnotherClass { 

    private $base; 

    function __construct(&$base) { 
     $this->base = $base; 

     SomeClass::SomeMethod(); 
    } 

} 
+0

アドバイスをいただきありがとうございます。これは、クラスを使用する必要があるすべての状況では機能しませんが、いくつかの場合には実行されます。 – jSherz

1

BaseFront Controller patternの実装です。フロントコントローラーは、あなたがやっていることを正確に行うMediatorの特別なケースです。基本的にはSomeClassAnotherClassを少数の依存関係で別々に開発し、管理することができます。

しかし、むしろ直接Baseクラスからクラスをアクセスするよりも、それはSomeClassを持っているとAnotherClassBaseクラスで自分自身を登録し、他のオブジェクトが呼び出しゲッターメソッドを公開するのが最善かもしれません:

class Base { 
    protected $_authenticator; 

    public function setAuthenticator(Authenticator $auth) { 
     $this->_authenticator = $auth; 
    } 

    public function getAuthenticator() { 
     return $this->_authenticator; 
    } 
} 

class Authenticator { 
    protected $_base; 

    public function __construct(Base $base) { 
     $this->_base = $base; 
     $this->_base->setAuthenticator($this); 
    } 
} 
+0

ありがとうございます。私はこれを私のプロジェクトに実装していくつもりです。 – jSherz

関連する問題