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?
)