In laravel, contracts refer to a series of interfaces that define core services provided by the framework to facilitate the development of third-party interface developers. The implementation of all contracts constitutes all core tasks of the framework, and can Understand the role of a given function through contracts.
#The operating environment of this article: Windows 10 system, Laravel version 6, Dell G3 computer.
What is the contract
The contract in Laravel refers to a series of interfaces provided by the framework that define core services, such as cache, queue, log The interface, the contract is the interface
Why do we need to define the interface
The purpose of defining the interface is decoupling
When we depend on the cache instance, laravel implements it as follows:
For example: We choose to use memcached cache driver
use Illuminate\Contracts\Cache\Repository as Cache; class Repository{ /** * 创建一个新的Repository实例 * * @param Cache $cache * @return void */ public function __construct(Cache $cache) { $this->cache = $cache; } }
Do not define the interface
If we do not define the interface we must write like this
use Memcached; class Repository{ /** * 创建一个新的Repository实例 * * @param Cache $cache * @return void */ public function __construct(Memcached $cache) { $this->cache = $cache; } }
This way when we need to switch the cache driver to redis When , we must go to the controller and change the type convention of dependency injection to redis, because the implementation of redis is not necessarily exactly the same as Memcached, which means that the Memcached cache is tightly coupled with laravel
What is Loose coupling
What is loose coupling? When the system is upgraded and an implementation needs to be modified (such as upgrading from Memcached to Redis), the code base can not be modified, and only the configuration needs to be modified. It is considered loosely coupled when the upgrade can be completed!
One contract has two, or multiple implementations
Personally, since the contract is finalized, the corresponding implementation should be two, or more implementations, or there will be in the near future There are two or more implementations, and the contract is here to stipulate so many implementations. If there is only one implementation, it feels like the contract is useless!
Summary
The definition contract is an agreement for the implementation of a set of functions to facilitate the development of third-party interface developers
The contract is more like a A directory index of the framework. The implementation of all contracts constitutes all the core services of the framework, and you can quickly understand what this set of functions does through the contract.
For cache classes, the cache contract is to stipulate Various cache implementations (Memcached, Redis, file cache) need to implement functions
[Related recommendations: laravel video tutorial]
The above is the detailed content of What is the usage of laravel contract. For more information, please follow other related articles on the PHP Chinese website!