DIってなんぞや
class A { private $db_handler; public __construct(Handler $db_handler) { $this->db_handler = $db_handler } }
このクラスは、Handlerクラスがないと動かない。依存している。
その依存しているインスタンスを外部から渡してやっている。
このクラスを使うなら、new A(new MySQLHandler())
こんな感じ。
これで嬉しいのは、new A(new PostgreSQLHandler())
とかで使うこともできる。
良くない例
class A { private $db_handler = new MySQLHandler(); }
class Aは、依存しているものの中身を意識しないでいい
このとき、使うべきHandlerが、MySQLなのか、PostgreSQLなのか、
そこを意識しないでも、プログラムを書けるのがいいところ。
このおかげで、プログラムを書いてる人はどのデータベースに対しても書けるし、
テストコードも書きやすい。