$ obj = CLASS :: getInstance (). 그런 다음 setter를 사용하여 종속성을 주입하고 $ obj-> initInstance ()를 사용하여 초기화 시작을 수행합니다.
나는 당신이 필요 이상으로 이것을 어렵게 만들고 있다고 생각합니다. 우리는 생성자를 통해 종속성을 잘 주입 할 수 있습니다-생성자가 많으면 사전과 같은 구조를 사용하여 사용하려는 것을 지정할 수 있습니다.
$obj = new CLASS(array(
'Frobnicator' => (),
'Foonicator' => (),
));
그리고 생성자 내에서 다음과 같이 일관성을 보장 할 수 있습니다.
if (!array_key_exists('Frobnicator', $args)) {
throw new Exception('Frobnicator required');
}
if (!array_key_exists('Foonicator', $args)) {
$args['Foonicator'] = new DefaultFoonicator();
}
$args
그런 다음 필요에 따라 개인 구성원을 설정하는 데 사용할 수 있습니다.
그렇게 생성자 내에서 완전히 수행되면 $obj
질문에 설명 된 시스템에서와 같이 존재하지만 초기화되지 않은 중간 상태는 절대 존재하지 않습니다. 객체가 항상 올바르게 사용되는 것을 보장 할 수 없기 때문에 이러한 중간 상태를 피하는 것이 좋습니다.