Я пытаюсь поднять голову вокруг DI. Правильно ли я делаю это для классов, которые следуют схеме DI?Инъекция зависимостей PHP - инъекции магических методов?
class Boo
{
public $title = 'Mr';
public $name = 'John';
protected $deps;
public function __construct($deps)
{
$this->deps = $deps;
}
public function methodBoo()
{
return 'Boo method '.$this->deps;
}
}
class Foo
{
private $objects;
public function __construct()
{
}
// Set the inaccessible property magically.
public function __set($name, $value)
{
$this->$name = $value;
}
// Set the inaccessible $class magically.
public function __get($class)
{
if(isset($this->objects[$class]))
{
return $this->objects[$class];
}
return $this->objects[$class] = new $class($this->deps);
}
public function methodFoo()
{
return $this->Boo->methodBoo();
}
}
$Foo = new Foo();
$Foo->deps = 'says hello';
var_dump($Foo->methodFoo());
результат,
string 'Boo method says hello' (length=21)
Я не хочу использовать строительство инъекции в некоторых случаях, потому что не все методы в Foo полагаются на те же инъекции. Например, methodFoo()
в Foo
полагается только на Boo
, тогда как другие методы полагаются на другие классы/инъекции.
Кроме того, я не хочу использовать инъекции сеттера либо потому, что я мог бы написать много их в Foo
, как
setBoo() {}
setToo() {}
setLoo() {}
... and so on...
Так я думал, используя магический метод __get
и __set
может спасти я от окончания написания длинный список из них. При этом я только «вводят» зависимости, когда это необходимо по методу в Foo
.
Правильно ли это делается? Раньше я еще не проводил никаких испытаний с помощью модульного теста. Можно ли проверить это решение?
Или любые лучшие решения, которые у вас есть?
Спасибо за ответ. Это то, о чем я думал! – laukok