私は他の2つのクラスにアクセスする必要があるクラスを持っています。 Signin
はPost
にアクセスする必要があり、Signin
にはDatabase
が必要です。これはどうすればいいですか?複数継承のPHPメソッドとは何ですか? - excellent
私は以前に継承チェーンを線形にしていましたが、これはDatabase
ではなく、Post
として人々を混乱させるようです。
私は他の2つのクラスにアクセスする必要があるクラスを持っています。 Signin
はPost
にアクセスする必要があり、Signin
にはDatabase
が必要です。これはどうすればいいですか?複数継承のPHPメソッドとは何ですか? - excellent
私は以前に継承チェーンを線形にしていましたが、これはDatabase
ではなく、Post
として人々を混乱させるようです。
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);
これは私がやりたがっていることですが、私はあなたの例を理解していません...あなたは何をコンストラクタに渡していますか... $ dbとは何ですか?あなたは何を渡しているのですか?あなたはクラス外でインスタンス化していますか?オブジェクト参照を渡していますか? –
@ stack.user.0上記の追加を参照してください。これは、それらのクラスのそれぞれに対してデータベースオブジェクトと投稿オブジェクトがあることを前提としています。それらはSigninのコンストラクタ –
に渡されます。私はLiskov置換原理を破る可能性が高いですが、後にtod依存性注入を切り替える可能性があります。 –
あなたはtraits' 'については見たことがありますか?あなたのように見えます – gustavotkg