服务容器
介绍
Laravel 服务容器是管理类依赖的强力工具。依赖注入是比较专业的说法,真正意思是将类依赖透过构造器或 「setter」 方法注入。
让我们来看一个简单的例子:
<?php namespace App\Handlers\Commands;
use App\User;
use App\Commands\PurchasePodcastCommand;
use Illuminate\Contracts\Mail\Mailer;
class PurchasePodcastHandler {
/**
* 一个发信功能的实现
*/
protected $mailer;
/**
* 创建一个新的实例
*
* @param Mailer $mailer
* @return void
*/
public function __construct(Mailer $mailer)
{
$this->mailer = $mailer;
}
/**
* 购买一个播客节目
*
* @param PurchasePodcastCommand $command
* @return void
*/
public function handle(PurchasePodcastCommand $command)
{
//
}
}
在这个例子中,当播客被购买时, PurchasePodcast
命令处理器需要发送一封电子邮件。所以,我们将注入一个服务来提供这个能力。当这个服务被注入以后,我们就可以轻易地切换到不同的实现。当测试我们的应用程序时,我们同样也可以轻易地「模拟」,或者创建一个虚拟的发信服务实现,来帮助我们进行测试。
如果要创建一个强大并且大型的应用,或者对 Laravel 的内核做贡献,首先必须对 Laravel 的服务容器进行深入了解。