php注入代码,PHP依赖注入(代码全篇)

本文介绍了依赖注入和控制反转的概念,通过传统应用程序创建对象的方式与依赖注入方式对比,展示了如何通过注入对象来管理依赖关系,从而提高代码的灵活性和可测试性。依赖注入允许在不修改代码的情况下更换依赖,如将Foo类中的Bar类替换为不同的实现,如从memcache切换到redis。最后,提到了依赖注入容器的角色,它负责实例化和管理对象的依赖,使得应用程序更加模块化和易于维护。
摘要由CSDN通过智能技术生成

依赖注入

传统的思路

应用程序用到一个Foo类,就会创建Foo类并调用Foo类的方法。

假如这个方法内需要一个Bar类,就会创建Bar类并调用Bar类的方法。

而这个方法内需要一个Bim类,就会创建Bim类,接着做些其它工作。

/**

* Foo

*/

class Foo

{

public function doSomething($value='')

{

# code...

$Bar = new Bar();

$Bar->doSomething();

echo 'Foo doSomething','
' ;

}

}

/**

* Bar

*/

class Bar

{

public function doSomething($value='')

{

# code...

$Bim = new Bim();

$Bim->doSomething();

echo 'Bar doSomething','
' ;

}

}

/**

* Bim

*/

class Bim

{

public function doSomething($value='')

{

# code...

echo 'Bim doSomething','
' ;

}

}

$doSomething = new Foo();

$doSomething->doSomething();

依赖注入

应用程序用到Foo类,Foo类需要Bar类,

Bar类需要Bim类,那么先创建Bim类,再创建Bar类并把Bim注入,再创建Foo类,并把Bar类注入,

再调用Foo方法,Foo调用Bar方法,接着做些其它工作。

/**

* Bim2

*/

class Bim2

{

public function doSomething($value='')

{

# code...

echo 'Bim2 doSomething','
' ;

}

}

/**

* Bar2

*/

class Bar2

{

private $bim2 ;

public function __construct(Bim2 $bim2)

{

# code...

$this->bim2 = $bim2 ;

}

public function doSomething($value='')

{

# code...

$this->bim2->doSomething();

echo "Bar2 doSomething",'
';

}

}

/**

* Foo

*/

class Foo2

{

private $bar2 ;

public function __construct(Bar2 $bar2)

{

# code...

$this->bar2 = $bar2 ;

}

public function doSomething($value='')

{

# code...

$this->bar2->doSomething();

echo "Foo2 doSomething",'
';

}

}

$doSomething2 = new Foo2(new Bar2(new Bim2()));

$doSomething2->doSomething();

这就是控制反转模式。依赖关系的控制反转到调用链的起点。这样你可以完全控制依赖关系,通过调整不同的注入对象,来控制程序的行为。

例如Foo类用到了memcache,可以在不修改Foo类代码的情况下,改用redis。

使用依赖注入容器后的思路是应用程序需要到Foo类,就从容器内取得Foo类,容器创建Bim类,再创建Bar类并把Bim注入,再创建Foo类,并把Bar注入,应用程序调用Foo方法,Foo调用Bar方法,接着做些其它工作.

扩展:容器负责实例化,注入依赖,处理依赖关系等工作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值