laravel5.5契約
阿新 • • 發佈:2018-03-27
log 添加 功能 emc AC AR fin 5.5 處理器
無規矩不成方圓,
Laravel 的契約是一組定義框架提供的核心服務的接口,規定了實現該接口的規範。
為什麽要使用接口
首先,讓我們來看一些高耦合緩存實現的代碼。如下:
<?php namespace App\Orders; class Repository { protected $cache; //緩存依賴一個特定的類Memcached public function __construct(\SomePackage\Cache\Memcached $cache) { $this->cache = $cache; } public function find($id) { if ($this->cache->has($id)) { // } } }
比起上面的做法,我們可以使用一個簡單的、與擴展包無關的接口來改進我們的代碼:
<?php
namespace App\Orders;
use Illuminate\Contracts\Cache\Repository as Cache;
class Repository
{
protected $cache;
//緩存依賴於接口Cache
public function __construct(Cache $cache)
{
$this->cache = $cache;
}
}
當所有 Laravel 的服務都使用簡潔的接口定義,就很容易判斷給定服務提供的功能。 可以將契約視為說明框架功能的簡潔文檔。
使用契約
要獲得一個契約的實現,你只需要被解析的類的構造函數中添加「類型提示」即可。
例如,看看這個事件監聽器:
<?php namespace App\Listeners; use App\User; use App\Events\OrderWasPlaced; use Illuminate\Contracts\Redis\Database; class CacheOrderInformation { /** * Redis 數據庫實現。 */ protected $redis; /** * 創建事件處理器實例。 * * @param Database $redis * @return void */ public function __construct(Database $redis) { $this->redis = $redis; } /** * 處理事件。 * * @param OrderWasPlaced $event * @return void */ public function handle(OrderWasPlaced $event) { // } }
laravel5.5契約