Laravel进阶系列笔记--(二)Laravel服务容器
作者:温新
时间:2021-07-04
hi,我是温新,一名PHPer。
Laravel服务容器是什么
Laravel服务容器是一个用于管理类依赖和执行依赖注入的强大工具。
通过案例理解 管理类依赖和执行依赖注入。为了便于理解,这个案例写有路由文件中。
// web.php
class A
{
public function __construct()
{
echo 'aaaaaaaa';
}
}
class B
{
public function __construct()
{
echo 'bbbbbbbb';
}
}
class Person
{
public $a = null;
public $b = null;
public function __construct(A $a, B $b)
{
$this->a = $a;
$this->b = $b;
}
}
Route::get('test', function(Person $person){
});
在这个案例中,Person
依赖于A
、B
,传统的操作就是new
然后将实例当做参数传递给Person
。
在Laravel中可以用更为先进的依赖注入来自动完成,这就解释了Laravel服务容器是一个用于管理类依赖和执行依赖注入的强大工具
。
绑定容器
服务容器需要配合服务提供者来实用,一个类不基于任何接口,这个类就没有必要绑定到容器。
本篇文章只做一个简单的演示,辅助理解。
由于是在web.php
文件中进行演示,那么我们就使用app()
助手函数或者App
门面来绑定。
测试类
// web.php
class A
{
public function __construct()
{
echo 'aaaaaaaa';
}
}
class Person
{
public $a = null;
public function __construct($a)
{
$this->a = $a;
}
}
简单绑定
bind
方法用于简单绑定
// web.php
// 简单绑定
app()->bind('Person', function(){
return new Person(new A);
});
使用
// 依赖注入方式
Route::get('test', function(Person $person){
});
// 解析方式
Route::get('test', function(){
resolve('Person');
});
绑定一个单例方式
方法:singleton
app()->singleton('Person', function(){
return new Person(new A);
});
解析
make方法
Route::get('test', function(){
app()->make('Person');
});
resolve辅助函数
Route::get('test', function(){
resolve('Person');
});
关于容器简单的演示就到这里。
我是温新
每天进步一点点,就一点点
请登录后再评论