Php 对子类使用setter注入额外的依赖项
例如,假设您有:Php 对子类使用setter注入额外的依赖项,php,oop,Php,Oop,例如,假设您有: abstract class AbstractA { private $dependency1; private $dependency2; private $dependency3; public function __construct(One $dep1, Two $dep2, Three $dep3) { // Set the class properties... } } 现在我们有一个类B: class
abstract class AbstractA {
private $dependency1;
private $dependency2;
private $dependency3;
public function __construct(One $dep1, Two $dep2, Three $dep3) {
// Set the class properties...
}
}
现在我们有一个类B
:
class B extends AbstractA {
private $dependency4;
private $dependency5;
public function __construct(One $dep1, Two $dep2, Three $dep3, Four $dep4, Five $dep5) {
parent::__construct($dep1, $dep2, $dep3);
$this->dependency4 = $dep4;
$this->dependency5 = $dep5;
}
}
如果我们有类C
,D
,E
,F
一直到Z
,它们是AbstractA
的子类/子类,并且比AbstractA
有一个或多个额外的依赖项,该怎么办。如果出于某种原因想要更改AbstractA
类中依赖项的顺序或删除其中一个,那么现在必须编辑类B
中的构造函数,直到Z
,这需要很长时间
我在想,如果您使用setter注入来注入子类可能需要的任何额外依赖项,那么您不需要不断地将构造函数添加到子类中,因此更改抽象类依赖项不需要3个小时
class B extends AbstractA {
private $dependency4;
private $dependency5;
// No constructor so the parent one gets executed.
public function setDependency4(......
public function setDependency5(......
}
我知道,为了使用这个类,您必须记住在实例化对象之后注入额外的依赖项,这是额外的工作,但从长远来看可能会节省时间
这是个好主意还是个坏主意?您应该更喜欢组合而不是继承=p通常,如果您的类具有如此多的依赖项,那么它被认为是一种代码味道。您还应该考虑这样一个事实,您的“依赖项”对于实例的功能可能不是强制性的。相反,这些“依赖项”实际上只是由一些方法执行。因此,您可以根据需要在方法中传递它们,而不是使用类的局部变量。好的,谢谢。我确实使用了很多接口,但有时我会进行继承。您应该使用库来管理依赖项,就像使用setter一样,而不是试图通过setter来管理依赖项。@Danack我确实使用了一个接口,但我认为您误解了我的问题。不过现在没事了。值得一读: