2014-09-08 2 views
2

현재 정적 메서드 나 전역 상태를 사용하지 않고 PHP로 약간의 프로젝트를 구축 중입니다.PHP에서 의존성 주입?

내 클래스의 생성자는 현재 이와 비슷하게 보이지만, 객체 인스턴스를 만들 때 종속 객체를 주입하고 있습니다.

class Something { 

    public function __construct(Name\Space\Object $object, Other\Name\Space $object2) 
    { 
     # Assign properties here 
    } 
} 

내 응용 프로그램의 클래스 중 하나에서 해당 메서드를 호출하여 다양한 개체의 새 인스턴스를 만들어야합니다. 아래에 조금 닮은 것;

class Something { 

    public function getNewObject() 
    { 
     return new Name\Space\Object(); 
    } 

    public function getNewObject2() 
    { 
     return new Name\Space\ObjectTwo(); 
    } 
} 

표준 의존성 주입 규칙을 준수하면서 어떻게해야합니까?

개체를 생성자에 삽입하는 것처럼 다른 방법으로 수행 할 수 있는지 확신 할 수없는 경우 응용 프로그램 내에서 많은 개체가 필요한 반면 개체가 하나만 포함됩니다.

덕분에,

답변

0

나는 기능은 PHP에서 첫 번째 클래스 객체가 있다고 생각, 그래서 이것은 작동합니다 :

<?php 
class MyClass { 
    function foo() { 
    return 'foo'; 
    } 
}; 

class MyOtherClass { 
    function __construct($klass) { 
     $this->klass = $klass; 
    } 

    function get_instance() { 
    return new $this->klass(); 
    } 
} 

$factory = new MyOtherClass(MyClass); 
$obj  = $factory->get_instance(); 
?> 
// <h1> value should equal foo 
<h1><?php echo $obj->foo();?></h1> 

편집 : 테스트 및 작품.

+1

이것은 멋지게 테스트를 구현하고 내가 어떻게 시작하는지 알려줍니다. 덕분에 내 솔루션보다 나은 솔루션입니다. – SolarSync

+0

이 솔루션은 작동하지만 클래스 이름을 생성자에 전달하면됩니다. $ klass 속성을 clobbering하여 런타임에 클래스를 재 할당 할 수도 있습니다. –

+0

감사합니다 :) 많이 도움이되었습니다. – SolarSync