私はPHPでOOPに移行しています。私はphp.netで説明を読んでいるが、私はここでいくつかの特定の答えを得ることができたと思っていた。PHPでクラスを構造化する方法
私の質問を説明するために、次の例を作成しようとしました。 「データベース」、「製品」、「ユーザー」クラスがあり、ユーザーがアクセスできる場合は製品を表示するとします。
"Products"クラスを "showProducts()"関数と呼びます。これは "User"クラスのインスタンスを作成し、 "Database"オブジェクトのインスタンスを作成し、ユーザーのアクセスレベルを確認します。
ユーザーがアクセスできる場合、 "showProducts()"関数は "Database"オブジェクトの別のインスタンスを作成し、データベースに照会します。
class Database{
public function query(){
//runs query here
}
public function __construct() {
//sets up connection here
}
}
class User{
public function checkAccess(){
$db = new Database();
$db->query(//pass in query to check access)
//does stuff, then returns true or false
}
}
class Products{
public function showProducts(){
$user = new User();
if($user->checkAccess())
$db = new Database();
$db->query(//pass in query to get products)
}
}
私は誰かがこれを正しい方法で行う方法を説明できると考えていました。
「データベース」オブジェクトの複数のインスタンスを作成することなく、アクセスする必要のあるすべてのクラスで使用できる1つの「データベース」オブジェクトを作成するコントローラクラスを用意したいと思います。私は、ユーザークラスで同じことをしたいので、 "User"クラスで何かを使う必要があるたびに、新しいオブジェクトを作成することなく、すべてのクラスがアクセスできる1つの$ usersオブジェクトがあります。
私の質問が明確でない場合はお詫び申し上げます。ご回答いただきありがとうございます。
返信いただきありがとうございます。
返信いただきありがとうございます!だから私は別のクラスを参照している場合は、ユーザークラスでは、私はパラメーターとして同様に$ユーザーオブジェクトを渡すだろうか? – Ben
はい、できます!あなたは好きなだけ多くのクラスを渡すことができます。オブジェクトが実際にそのオブジェクトを必要とする場合は、コンストラクタを介してオブジェクトを渡すことができます。オブジェクトがオプションの場合は、setterメソッドを渡すことができます。複雑な依存関係を取得したら、依存関係を記述するDependency Injection Containerの使用について考えることができ、Containerは他のオブジェクトからオブジェクトをアセンブルして返すことができます:) Dependency Injection and Dependency Injection Container :http://fabien.potencier.org/article/12/do-you-need-a-dependency-injection-container – otporan