PHP中的IOC(反转控制)和狄(依赖注入)

PHP中的IOC(反转控制)和狄(依赖注入)
先看一个例子。
< PHP

班上的一个
{
公共单位;
公开发行;
公共职能A()
{

}
公共函数法()
{
这一新的B();
这一新的C();

$此方法();
$此方法();
}
}

B类
{
公共职能B()
{

}
公共函数法()
{

echo'b;
}
}

C类
{
公共函数C()
{

}
公共函数法()
{

echo'c;
}
}

美元=新的A();
$ a >方法();

>
上面的代码,我们可以很容易地理解一句话:

类依赖于B类和C类。

也就是说,如果在未来的发展过程中,修改B类或C类,一旦函数名,函数参数的数目的变化,甚至整个结构的调整,我们也应该对班级做出相应的调整,班上的一个独立性的丧失,这是非常方便的开发过程相通的,如果两个类是两写的,矛盾往往在这个时候产生的…

如果你真的想改变B类和C类,是否有一种方法尽可能少地修改或修改一个类的代码这里使用了控制反转。

高级模块不应该依赖于底层模块,而两个模块应该依赖于抽象。

IOC是一种思想,依赖注入(DI)是实现这一思想的方法。

第一种方法称为构造函数注入(不推荐这种方法,但它比没有更好)。
班上的一个
{
公共单位;
公开发行;
公共职能A(b,C)
{
$;
$;
}
公共函数法()
{
$此方法();
$此方法();
}
}
客户端类编写此:
$ =新的A(新的B(),新的C());
$ a >方法();
一个构造函数是依赖于B和C的,在构造函数中传递参数,至少有一个点,就是创建一个B对象和B对象C类C到A类,B类和C类,所以一次修改,不需要修改,只要客户端类可以被修改。

如果有一天,我们需要扩展B类并做两个B类的子类
B类
{
公共职能B()
{

}
公共函数法()
{

echo'b;
}
}
B1类扩展B
{
公共功能B1()
{

}
公共函数法()
{
echo'b1;
}
}
类B扩展B
{
公共职能B2()
{

}
公共函数法()
{
echo'b2;
}
}
这也很简单,客户机类写这个:
$ =新A(新的B2(),新的C());
$ a >方法();
所以一个类不关心B类的子类,只要它们关心的是客户类。

第二种方法称为工厂模式注入(推荐)。
类工厂
{
公共功能工厂()
{

}
公共函数创建($ s)
{
开关(美元)
{
case'b:
{
返回新的b();
打破;
}
case'c:
{
返回新的C();
打破;
}
违约:
{
空回;
打破;
}
}
}
}
我们的类代码更改为:
班上的一个
{
公共单位;
公开发行;
公共职能A()
{

}
公共函数法()
{
新工厂();
美元-> b = a ->创建(B);
美元-> c = a ->创建(C);

$此方法();
$此方法();
}
}
事实上,一小部分已经解耦。至少,如果B类和C类的构造函数发生变化,比如修改函数参数,我们只需要更改工厂类。

抽象不应该依赖细节,细节应该依赖于抽象。

抽象B类和C类的方法,并制作接口
接口方法
{
公共函数法();
}
这样,类中的b变量和$变量就不再是一个特定的变量,而是一个抽象类型变量。直到操作时刻才知道它们的方法模式是如何实现的。
B类实现方法
{
公共职能B()
{

}
公共函数法()
{

echo'b;
}
}

C类的实现方法
{
公共函数C()
{

}
公共函数法()
{

echo'c;
}
}
总结几点:

1。我们将类中B类对象和C类对象的创建移到类a

2。原来一个类依赖于B类和C类,现在它变成了一个依赖的工厂,工厂依赖于B和C。
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部