先看一个例子。
< 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();
打破;
}
违约:
{
返回null;
打破;
}
}
}
}
我们的类代码更改为:
班上的一个
{
公共单位;
公开发行;
公共职能A()
{
}
公共函数法()
{
新工厂();
美元-> b = a ->创建(B);
美元-> c = a ->创建(C);
$此方法();
$此方法();
}
}
事实上,一小部分已经解耦。至少,如果B类和C类的构造函数发生变化,比如修改函数参数,我们只需要更改工厂类。
抽象不应该依赖细节,细节应该依赖于抽象。
抽象B类和C类的方法,并制作接口
接口方法
{
公共函数法();
}
这样,B类的B变量和B变量和C变量不再是一个特定的变量,而是一个抽象
类型变量。直到
操作阶段,他们不知道他们的方法模式是如何实现的。
B类实现方法
{
公共职能B()
{
}
公共函数法()
{
echo'b;
}
}
C类的实现方法
{
公共函数C()
{
}
公共函数法()
{
echo'c;
}
}
总结几点:
1。我们将类中B类对象和C类对象的创建移到类a
2。原来一个类依赖于B类和C类,现在它变成了一个依赖的工厂,工厂依赖于B和C。
以上是本文的全部内容,希望本文的内容能给大家的
学习或
工作带来一定的帮助,同时也希望能给予更多的
支持!