接口我理解的原因。单一责任我理解推理。基本上我明白为什么'合同'路径已被选中,我只是在努力理解实施。
例如,文档给出了这个例子:
<?php namespace App\Orders;
use Illuminate\Contracts\Cache\Repository as Cache;
class Repository {
/**
* Create a new repository instance.
*
* @param Cache $cache
* @return void
*/
public function __construct(Cache $cache)
{
$this->cache = $cache;
}
}
如果我要更换laravel本机缓存驱动程序,让我们说第三方,框架无关的缓存驱动程序,那么我是否必须编写一个适配器来遵守Laravel 5.0缓存协议?
答案 0 :(得分:2)
我认为你在问Binding Interfaces To Implementations。
$this->app->bind('App\Contracts\EventPusher', 'App\Services\PusherEventPusher');
在'Illuminate/Foundation/Application.php'中,它告诉容器抽象关键字的别名是什么:
'cache' => ['Illuminate\Cache\CacheManager', 'Illuminate\Contracts\Cache\Factory'],
这样,当你写时
$this->app->make('Illuminate\Cache\CacheManager')
或
$this->app->make('Illuminate\Contracts\Cache\Factory')
它与
基本相同$this->app->make('cache')
在Illuminate \ Cache \ CacheServiceProvider.php中,它告诉容器什么是对abstract关键字的真正绑定:
$this->app->singleton('cache', function ($app) {
return new CacheManager($app);
});
如果您有其他问题,请告诉我。