PHPで依存関係注入を理解しようとしています.Laravelでこれを行うには2つの方法があります。phpのこれら2つのタイプのコンストラクタインジェクションの違いは何ですか?
class Foo{
}
今
I持っているので、私のような何かができるFoo
に依存しているBar
というクラス:
class Bar{
protected $foo;
public function __construct()
{
$this->foo = new Foo();
}
}
しかし
だから、私たちは、私はそうのようなクラスFoo
を持っているとしましょうララヴェルでは、タイプヒントやリフレクションのような言葉が出てきました。
class Bar{
protected $foo;
public function __construct(Foo $foo)
{
$this->foo = $foo;
}
}
私が理解しようとしているのは、これら2つの違いです。彼らは全く同じですか?そして、私が他の人よりも好むべき特別な理由はありますか?
PS:私は初心者です。質問で専門用語を正しく使用しているかどうかはわかりません。
最初の例は、FooをBarに偽装することができないため、テストするのが非常に難しいです。 2番目はDependency Injection(DI)と呼ばれ、Bar –
の可能性のある重複をテストしているときにFooを模擬することができます(依存性注入とは何ですか?)(http://stackoverflow.com/questions/130794/what-is-依存関係注入) – Gal
2つめは、Fooが実際にFooインスタンスになる必要もなくなりますが、FooまたはFooを拡張するクラスのインスタンス(型ヒントがそれを強制する)のいずれかになります.... loose couplingあなたがもはや実際のFooに拘束されていないからです。 –