2011-11-15 4 views
0

私は他の2つのクラスにアクセスする必要があるクラスを持っています。 SigninPostにアクセスする必要があり、SigninにはDatabaseが必要です。これはどうすればいいですか?複数継承のPHPメソッドとは何ですか? - excellent

私は以前に継承チェーンを線形にしていましたが、これはDatabaseではなく、Postとして人々を混乱させるようです。

+0

あなたはtraits' 'については見たことがありますか?あなたのように見えます – gustavotkg

答えて

3

PHPには複数の継承がありません(あなたがすでに理解していると思います)。しかし

class Child_Class extends Parent_Class implements Brother_Interface {} 

、いずれかの状況に合わせていないようです:あなたは、線形継承チェーンを作ることができない場合は、別のオプションは、インターフェイスを作成し、実施しています。

必要に応じて、DatabaseオブジェクトとPostオブジェクトを、依存性注入を介してSigninオブジェクトに渡すことが適切です。結局、Signinは本当にDatabaseの拡張ですか?それはPost(多分)の拡張ですか?依存性注入は、ここでより適切なOO方法論であるかもしれません。

それが使用されている方法
class Signin { 
    private $db; 
    private $post; 

    public function __construct($post, $db, $othervariables...) { 
    $this->db = $db; 
    $this->post = $post; 

    // Rest of constructor 
    } 
    // Access via $this 
    public function something_using_db() { 
    $this->db->execute("SELECT * FROM tbl;"); 
    } 
} 

$db = new Database(); 
$post = new Post(); 

// Create Signin object using the Database and Post  
$signin = new Signin($post, $db); 
+0

これは私がやりたがっていることですが、私はあなたの例を理解していません...あなたは何をコンストラクタに渡していますか... $ dbとは何ですか?あなたは何を渡しているのですか?あなたはクラス外でインスタンス化していますか?オブジェクト参照を渡していますか? –

+0

@ stack.user.0上記の追加を参照してください。これは、それらのクラスのそれぞれに対してデータベースオブジェクトと投稿オブジェクトがあることを前提としています。それらはSigninのコンストラクタ –

+0

に渡されます。私はLiskov置換原理を破る可能性が高いですが、後にtod依存性注入を切り替える可能性があります。 –