1. 程式人生 > >laravel5.5契約

laravel5.5契約

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契約