【php】laravel学习笔记-契约

1 什么是契约?

 什么是契约?为什么要用契约?契约能带来什么好处?
 契约其实就是DI依赖注入的注入类的声明关系,它在register方法中声明了什么样的类型提示要注入时对应什么样的类?关于依赖注入不明白的可以参考《【php】hyperf笔记-依赖注入》的说明。
 为什么要用契约?契约能带来什么好处?
  上面说了,依赖注入是根据类型提示符来注入对应的类,如果在程序中各个地方使用这种(实际上laravel只能在控制器能使用依赖注入)基于提示符来注入依赖,哪天要修改替换为哪一个类时也只需要修改类型提示符关联的类就行了,从使所以的通过依赖注入的实例都生效。还有由于依赖注的实例统一在一个地方生成的,可以进行干预处理,从而影响到全局的程序,也就是面向切面(AOP);
 而用契约能使代码看起更明确,更统一。

2 示例代码

2.1 订单服务类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

<?php
namespace App\Http\Service;

use EasyWeChat\Factory;
use App\Model\{
CaseOrder as CaseOrderModel,
PayTimes as PayTimesModel
};
use App\Model\Cases as CasesModel;
use Illuminate\Support\Facades\Storage;

class CaseOrder extends Base
{
/**
* 分期表
*
*/
public function getPayTimesById($order_id)
{
$PayTimes = (new PayTimesModel())->where('order_id', $order_id)
->get()
->makeHidden(['created_at', 'updated_at', 'order_id']);
return $PayTimes->toArray();

}

}

2.2 声明依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use App\Http\Service\{
CaseOrder as CaseOrderService
};

class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*
* @return void
*/
public function register()
{
// 契约注册 提示符 对应类
$this->app->bind(CaseOrderService::class, CaseOrderService::class);
}

/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
//
}
}

2.3 控制器使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php

namespace App\Http\Controllers\Api;

use App\Http\Service\{
CaseOrder as CaseOrderService
};

class CaseOrderController extends Controller
{


/**
* 分期表
*
*/
public function payTimesIndex(CaseOrderService $CaseOrderService)
{
$pay_times_list = $CaseOrderService->getPayTimesById($Request->id);
return $this->responseSuccessData($pay_times_list);
}
}
坚持原创技术分享,您的支持将鼓励我继续创作!
0%