3

Dependency Injection (データベースなど) の背後にある基本的な考え方はわかりましたが、静的関数でそれを使用する方法がわかりませんでした:

class Foo{
    private $id; 
    private $class_variables,...;
    private $db;
    public function __construct($db,$id,$class_varibles,...)
    {
        $this->db=$db;
        //Assignments
    }

    public static function Get_By_ID($id)
    {
     //No DB-Connection here
     return new Foo(?);
    }
}

これを行う唯一の方法は次のとおりですか?

class Foo{
     ...
     public static function Get_By_ID($db,$id)
     {
        //Do work here!
        return new Foo($db,$id,$class_variables,...);
     }

いくつかの静的関数には多くの追加作業が必要なようです。また:

$f = new Foo($db);

保存した "$db" を使用して新しいオブジェクトを作成することしかできません (private $db)

$b = $f->Create_Bar();

どうすればこの問題を解決できますか? 唯一の方法です:

$b = $f->Create_Bar($db_for_bar);

追加:静的関数でそれを行う方法は?

$b = Foo::Create_Bar($db_for_foo,$db_for_bar);

私は何が欠けていますか?

(追加2:

 $f = new Foo($db); //Dependency Injection ($db is saved in $f, and is the database-link for example)
 $f->Create_Bar($db_for_bar); //OK - No Problem

しかし、「Foo」内で「Create_Bar」が呼び出された場合はどうなりますか

 $this->Create_Bar(???) //Where does the $db_for_bar come from?

)

4

1 に答える 1