My thought was to use factories to get dependencies
. 한 단계 더 나아가 리플렉션 API와의 종속성을 해결하는 것이 좋습니다.
실제로 힌트 생성자 인수를 입력 할 수 있으며 Reflection API는 유형 힌트를 완전히 읽을 수 있습니다. 물론
<?php
class Email {
public function send()
{
echo "Sending E-Mail";
}
}
class ClassWithDependency {
protected $email;
public function __construct(Email $email)
{
$this->email = $email;
}
public function sendEmail()
{
$this->email->send();
}
}
$class = new \ReflectionClass('ClassWithDependency');
// Let's get all the constructor parameters
$reflectionParameters = $class->getConstructor()->getParameters();
$dependencies = [];
foreach($reflectionParameters AS $param)
{
// We instantiate the dependent class
// and push it to the $dependencies array
$dependencies[] = $param->getClass()->newInstance();
}
// The last step is to construct our base object
// and pass in the dependencies array
$instance = $class->newInstanceArgs($dependencies);
$instance->sendEmail(); //Output: Sending E-Mail
당신이 오류 (예를 들어 생성자의 인자에 대한 Typehint가없는 경우) 직접 검사를 수행해야합니다
여기에 매우 기본적인 예이다. 또한이 예제는 중첩 된 종속성을 처리하지 않습니다. 그러나 기본적인 아이디어를 얻어야합니다.
이 단계를 한층 더 생각하면 특정 유형 힌트를 삽입 할 인스턴스를 구성하는 작은 DI 컨테이너를 어셈블 할 수도 있습니다.